Socket.io连接url?
我有当前设置:Socket.io连接url?,socket.io,Socket.io,我有当前设置: 在端口80上运行的Nodejs代理(运行http反向代理) 在端口3000上运行的Rails服务器 在端口8888上运行的Nodejs web服务器 因此,任何以/nodejs/开头的请求都将被重定向到8888上的nodejs web服务器 其他任何内容都将重定向到端口3000上的rails服务器 当前Socket.io需要io.connect的连接url 请注意,/nodejs/socket.io/socket.io.js是有效的,并返回所需的socket.io客户端js库
但是,我无法在服务器上指定到/nodejs/的连接url 我已经尝试过和其他变体,但我仍然得到以下url的404错误
是否可以告诉io.connect以/nodejs/?为每个连接url添加前缀您可以这样指定资源:
var socket = io.connect('http://localhost', {resource: 'nodejs'});
默认情况下,我使用以下方法来实现此目标: 客户端:
var socket = io.connect('http://localhost:8183/?clientId='+clientId,{"force new connection":true});
var socket = io('https://dev.octagon.com:8443', {path: '/octagon/socket.io'})
服务器端:
var io = require('socket.io').listen(server);
io.sockets.on('connection', function(socket) {
console.log("url"+socket.handshake.url);
clientId=socket.handshake.query.clientId;
console.log("connected clientId:"+clientId);
});
var io = require('socket.io')(server, {path: '/octagon/socket.io'});
参考资料:从Socket.io版本1开始,资源已替换为路径。使用:
var socket = io('http://localhost', {path: '/nodejs/socket.io'});
请参阅:如果您将express与nodejs一起使用: 服务器端:
var io = require('socket.io').listen(server);
io.sockets.on('connection', function(socket) {
console.log("url"+socket.handshake.url);
clientId=socket.handshake.query.clientId;
console.log("connected clientId:"+clientId);
});
var io = require('socket.io')(server, {path: '/octagon/socket.io'});
然后
客户端:
var socket = io.connect('http://localhost:8183/?clientId='+clientId,{"force new connection":true});
var socket = io('https://dev.octagon.com:8443', {path: '/octagon/socket.io'})
然后
如果您正在使用express为您的应用程序提供服务,那么您可以查看此信息。请记住,express使用http为您的应用程序提供服务
const express = require('express'),
http = require('http'),
socketIo = require('socket.io'),
app = express()
var server = http.createServer(app);
var io = socketIo(server);
io.on('connection', (socket)=>{
// run your code here
})
server.listen(process.env.PORT, ()=> {
console.log('chat-app inintated succesfully')
})
事实上,我认为需要将
{resource:'nodejs/socket.io'}
放在这里。从v1.0开始,这已经过时了。资源已被路径替换。而是使用:var socket=io(“”,{'path':'/nodejs/socket.io'});这里有一个使用sails的类似问题:在这个uri中;你为什么用8183?我们知道套接字io的端口是3000?@shihab_返回您可以分配任何您想要的端口。您不需要使用3000。我发现除了服务器端之外,在客户端,使用var socket=io({path:'/octagon/socket.io'})
对我也适用。