节点 Socket.io 链接如何在服务器而不是 localhost(wamp/xampp) 中提供

Posted

技术标签:

【中文标题】节点 Socket.io 链接如何在服务器而不是 localhost(wamp/xampp) 中提供【英文标题】:node Socket.io links how will give in server not localhost(wamp/xampp) 【发布时间】:2017-01-06 17:19:24 【问题描述】:

我是套接字会话的新手,但我了解了它将如何在 wamp/xampp localhost 中工作。 但是当我移动到托管的服务器时。它不会工作。

<script src="http://localhost:3000/socket.io/socket.io.js"></script>

以上工作在 wamp/xampp 中。但在托管服务器中找不到。 我应该在 src. 我的托管是这样的: aaa.bbb.com,其端口为 8803 或 bbb.com,端口为8803。

我已经尝试过像这样包含的方法

<script src="/socket.io/socket.io.js"></script>
<script src="http://aaa.bbb.com:3000/socket.io/socket.io.js"></script>
<script src="http://bbb.com:3000/socket.io/socket.io.js"></script>

我的服务器端代码是

var express = require('express');
var app = express();
var socket = require('socket.io');
var server = require('http').createServer(app);
server.listen(3000);
var io = socket.listen(server);
var async = require('async');
var mysql= require('mysql');
var pool  = mysql.createPool(
   host     : 'XXXXX',
   user     : 'XXXXX',
   password : 'XXXX',
   database:'XXXXX',
 );

 var chatserver=require('./chatserver.js');
 var chatpage=io.of('/as/chatRoom').authorization(function (handshakeData, callback) 
 console.dir(handshakeData);
 handshakeData.page = '/welcome/chatRoom';
 callback(null, true);
 ).on('connection', function (socket) 
   console.dir(socket.handshake.page);
   chatserver.getUserFeeds(chatpage,socket,io,pool,async);
);

【问题讨论】:

当你尝试进入 socket.io 时会发生什么? Doss 它无限加载还是你得到一些错误?另外,你用的是 nginx 还是 apache,或者别的什么? 每当我使用上面的脚本行时,找不到 socket.io.js 我得到错误 能否也向我们展示您的服务器代码? 我用服务器端 js 编辑问题 我得到控制台错误 Unexpected token 【参考方案1】:

抱歉,回复晚了。它适用于我的代码本身。只认为我们必须在服务器中允许 PORT 3000。将端口号添加到 IP 表或禁用服务器防火墙,然后它就可以正常工作了:)

【讨论】:

【参考方案2】:

使用您的代码:

var express = require('express');
var app = express();
var socket = require('socket.io');
var server = require('http').createServer(app);
server.listen(3000);
var io = socket.listen(server);

socket.io.js 路径是:

http://127.0.0.1:3000/socket.io/socket.io.js

您需要使用 javascriptphp

Javascript:

(动态js包含)

var PORT = 3000;
var script = document.createElement("script");
script.type = "text/javascript";
script.src = "http://" + document.location.hostname + ":" + PORT + "/socket.io/socket.io.js";
script.onerror = function () 
    console.log("Socket.io: unfound.");
;
script.onload = function () 
    console.log("Socket.io: loaded.");
    // Your code here.
    // startSocketIO();
;

document.getElementsByTagName("head")[0].appendChild(script);
// <script type="text/javascript" src="http://127.0.0.1:3000/socket.io/socket.io.js"></script>

PHP:

<script src="http://<?=$_SERVER["SERVER_NAME"]?>:3000/socket.io/socket.io.js"></script>

【讨论】:

【参考方案3】:

在节点的 index.js 的服务器端,您需要在 http 服务器上需要 io

var 
app = require('express')(),
http = require('http').Server(app),
io = require('socket.io')(http);`

我取消了车把作为我的模板系统,所以,我继续说下去。在您的主页模板文件中,您将添加

<script>
var socket = io.connect('http://bbb.com:3000');
   socket.on('connect', function()
       socket.emit('authenticate', data: "token");
       socket.on('error', function(err) alert(err); 
   );
   socket.on('unauthorized', function(err)
       alert("Disconnected");
       console.log("There was an error with the authentication:", err.message);
    );
    socket.on('disconnected', function()  alert('Disconnected') );
 );
 </script>

这在实时服务器上对我有用。

【讨论】:

当您不提供时,Socketio 会生成自己的 http 服务器。我不确定这是否能解决问题

以上是关于节点 Socket.io 链接如何在服务器而不是 localhost(wamp/xampp) 中提供的主要内容,如果未能解决你的问题,请参考以下文章

来自 php 源的 Socket.io

来自 php 源的 Socket.io

错误:找不到模块'socket.io-client / dist / socket.io.min.js'

socket.io 啥时候使用轮询而不是 websockets?

Socket-IO 使用轮询而不是 Websocket

在真实的服务器中运行socket.io服务器,而不是localhost?