我在这个论坛上看过一些关于Socket.IO和node.js的帖子。但仍然没有达到最佳效果。
端口80和端口8080由我的网络服务器用于不同的应用程序。所以在App.js和我的套接字连接中,我添加了端口8081而不是8080。
我收到的websocket连接无效消息。大约10秒后,它创建了websocket,我能够很好地使用它。
但是10秒太长了。任何想法如何解决这个问题?
的script.js:
<script>
var socket = io.connect('http://domainname.nl:8081');
socket.on('connect', function(){
socket.emit('adduser', "<?php echo $user->first_name; ?>");
});
app.js
var app = require('express').createServer()
var io = require('socket.io').listen(8081);
app.listen(8081);
// routing
app.get('/', function (req, res) {
res.sendfile(__dirname + '/index.html');
});
更新:
当我改变它。我还是遇到了问题。套接字工作但需要10秒才能连接
info - socket.io started
debug - served static /socket.io.js
debug - client authorized
info - handshake authorized 15619940591959058675
debug - setting request GET /socket.io/1/websocket/15619940591959058675
debug - set heartbeat interval for client 15619940591959058675
warn - websocket connection invalid
info - transport end
debug - set close timeout for client 15619940591959058675
debug - cleared close timeout for client 15619940591959058675
debug - cleared heartbeat interval for client 15619940591959058675
debug - client authorized for
debug - setting request GET /socket.io/1/xhr-polling/15619940591959058675?t=1345479037596
debug - setting poll timeout
debug - clearing poll timeout
答案 0 :(得分:2)
您正在尝试启动两个不同的服务器,一个用于app
,另一个用于socket.io,两者都使用相同的端口8081
:
var app = require('express').createServer()
var io = require('socket.io').listen(8081);
app.listen(8081);
你可以像这样将端口号传递给socket.io,但如果要用节点http服务器运行它,你应该传递它(即app
)来监听,如下所示: / p>
var app = require('express').createServer()
var io = require('socket.io').listen(app);
app.listen(8081);
答案 1 :(得分:0)
通过代理连接时遇到了同样的问题。
我的服务器(express + socket.io,就像@Linux G Thiel描述的那样)在app.example.com:12345
收听,并且有一个代理设置在example-app.com
(端口80)上提供服务。通过实际URL访问时它可以正常工作,但是当通过代理访问时,它在websocket连接上显示了10秒的延迟。
我设法通过简单地改变
来解决它var socket = io.connect();`
到
var socket = io.connect('http://app.example.com:12345')
在客户端代码中。