Node.js Websockets Socket.IO

我无法得到客户端事件触发,请参阅代码/说明:

好吧,所以我得到了这个工作(我认为)

客户端代码:

<script src="./Socket.IO/socket.io.js"></script> <script> io.setPath('./Socket.IO/'); var socket = new io.Socket('jayz.danstanhope.webfactional.com', { 'port': 80 }); socket.on('connect', function () { alert('connect'); }); socket.on('message', function (msg) { alert('message' + msg); }); socket.on('close', function () { alert('close'); }); socket.on('disconnect', function () { alert('disconnect'); }); socket.connect(); </script> 

服务器端代码:

 var sys = require("sys") , fs = require("fs") , path = require("path") , http = require("http"); var io = require('/home/danstanhope/webapps/htdocs/Socket.IO-node'); var server = http.createServer(function (req, res) { //your normal server code res.writeHead(200, { 'Content-Type': 'text/html' }); res.write('Hello world'); res.end(); }); server.listen(26970); server = io.listen(server); server.on('connection', function(client){ sys.log('client connected'); }); 

当我在Chrome中刷新页面时,可以看到正在Shell中写入的日志。

以下是我所看到的:

 danstanhope@web146 htdocs]$ node server.js 9 Aug 19:19:37 - socket.io ready - accepting connections 9 Aug 19:19:40 - Initializing client with transport "websocket" 9 Aug 19:19:40 - Client 21789167495444417 connected 9 Aug 19:19:40 - client connected 9 Aug 19:19:40 - Client 21789167495444417 disconnected 

现在唯一的问题是得到任何这些JavaScript套接字警报触发。

此外,这个错误在Chrome中显示:

 Bad Upgrade header: Server: nginx Date: Wed, 11 Aug 2010 23:06:06 GMT Transfer-Encoding: chunked Connection: keep-alive Upgrade: WebSocket 

任何想法如何解决“坏头”?

谢谢,丹

您可以使用nginx代理标准的HTML请求,但不能使用websocket或flashsockets连接,因为nginx无法通过代理转发非HTTP 1.0stream量。 所以websocket是不行的,Flash将无法发送它的跨域策略,因为它看起来有点像这样:

 <policy-file-request/>\x00 

哪个nginx愉快地抛出一个HTTP 400错误。

为了使其工作,您必须连接客户端端口您的node.js应用程序正在侦听:

 <script src="./Socket.IO/socket.io.js"></script> <script> io.setPath('./Socket.IO/'); var socket = new io.Socket('jayz.danstanhope.webfactional.com', { 'port': 26970 }); socket.on('connect', function () { alert('connect'); }); socket.on('message', function (msg) { alert('message' + msg); }); socket.on('close', function () { alert('close'); }); socket.on('disconnect', function () { alert('disconnect'); }); socket.connect(); </script> 

截至目前,不可能利用nginx机器的websockets。 最近这个问题可能已经被纠正了,但是我所有的研究都表明,nginx和Apache目前不能托pipewebsocket。 似乎大多数反向代理不同意websockets。

nginx可以用作后端websocket服务器的反向代理吗?

我回到了这个完全相同的问题,问题最终由两个不同版本的socket.io引起的。 我使用npm导入一个版本,然后从不同的开发人员在github上获得客户端版本,他们是不兼容的。 仔细检查你是不是无意中使用别人的叉子。

根本不了解websocket,但是在客户端代码中,您使用端口80初始化套接字,但是您要告诉服务器在端口26970上进行监听。

“在Chrome 4和5中使用的http://tools.ietf.org/html/draft-hixie-thewebsocketprodocol-75 ,响应头必须以:

HTTP / 1.1 101 Web Socket协议握手

升级:WebSocket

连接:升级“

做了一个快速的谷歌search,这是我想出了。

很确定的方法名称是“addEvent”,而不是“on”,虽然“on”肯定会更“节点-y”:)

 socket.addEvent('connect', function () { alert('connect'); }); socket.addEvent('message', function (msg) { alert('message' + msg); }); socket.addEvent('close', function () { alert('close'); }); socket.addEvent('disconnect', function () { alert('disconnect'); });