节点 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
您需要使用 javascript 或 php。
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) 中提供的主要内容,如果未能解决你的问题,请参考以下文章
错误:找不到模块'socket.io-client / dist / socket.io.min.js'