Socket.io 连接网址?
Posted
技术标签:
【中文标题】Socket.io 连接网址?【英文标题】:Socket.io connection url? 【发布时间】:2012-04-01 12:37:59 【问题描述】:我有当前的设置:
-
Nodejs 代理(运行 http-reverse-proxy)在端口 80 上运行。
Rails 服务器在 3000 端口上运行
Nodejs Web 服务器运行在 8888 端口
所以任何以 /nodejs/ 开头的请求都会被重定向到 8888 上的 nodejs 网络服务器。
任何其他内容都将被重定向到端口 3000 上的 rails 服务器。
目前 Socket.io 需要 io.connect 的连接 url。
请注意,/nodejs/socket.io/socket.io.js 有效,并返回所需的 socket.io 客户端 js 库。
但是,我无法在我的服务器上将 connection_url 指定到 /nodejs/。
我已经尝试过http://myapp.com/nodejs 和其他变体,但我仍然收到以下 url http://myapp/socket.io/1/?t=1331851089106 的 404 错误
是否可以告诉 io.connect 为每个连接 url 加上 /nodejs/ 前缀?
【问题讨论】:
这是一个使用sails的类似问题:***.com/questions/36348956/… 【参考方案1】:从 Socket.io 版本 1 开始,资源已被路径替换。使用:
var socket = io('http://localhost', path: '/nodejs/socket.io');
见:http://blog.seafuj.com/migrating-to-socketio-1-0
【讨论】:
【参考方案2】:你可以像这样指定资源:
var socket = io.connect('http://localhost', resource: 'nodejs');
默认resource = "socket.io"
【讨论】:
其实我觉得需要换成resource: 'nodejs/socket.io'
。
从 v1.0 开始已经过时。资源已被路径替换。而是使用: var socket = io('localhost', 'path': '/nodejs/socket.io');【参考方案3】:
如果你在 nodejs 中使用 express:
服务器端:
var io = require('socket.io')(server, path: '/octagon/socket.io');
然后
io.on('connection', function(socket)
console.log('a user connected, id ' + socket.id);
socket.on('disconnect', function()
console.log('a user disconnected, id ' + socket.id);
)
)
socket.on('publish message ' + clientId, function(msg)
console.log('got message')
)
客户端:
var socket = io('https://dev.octagon.com:8443', path: '/octagon/socket.io')
然后
socket.emit('publish message ' + clientId, msg)
【讨论】:
我发现除了服务器端,在客户端,使用var socket = io(path: '/octagon/socket.io')
对我有用。【参考方案4】:
我使用以下方法来实现这个目标:
客户端:
var socket = io.connect('http://localhost:8183/?clientId='+clientId,"force new connection":true);
服务器端:
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);
);
参考:https://github.com/LearnBoost/socket.io/wiki/Authorizing#global-authorization
【讨论】:
在这个 uri 中; localhost:8183 ;你为什么用8183?我们知道socket io的端口是3000? @shihab_returns 您可以分配任何您想要的端口。您不需要使用 3000。【参考方案5】:如果您使用 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')
)
【讨论】:
以上是关于Socket.io 连接网址?的主要内容,如果未能解决你的问题,请参考以下文章
android studio连接io.socket:sokect.io-client服务器的条件