Node.js WebSocket服务器

3

目前我正在尝试为我们数据库周围的新活动创建推送服务器实例。当然,你可以找到很多关于这个主题的信息。

我正在使用: http://static.brandedcode.com/nws-docs/#s6-p1

以下是客户端实现:

<!DOCTYPE html>
<html>
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />

        <script src="http://cdn.socket.io/stable/socket.io.js"></script>
        <script src="http://ajax.googleapis.com/ajax/libs/jquery/1.5.2/jquery.min.js"></script>

        <title></title>
    </head>
    <body>
        <script type="text/javascript">
            (function() {
                var webSocket = new io.Socket('ws//test', {
                    port: 8080
                });

                webSocket.connect();

                webSocket.on('connect',function() {
                    console.log('Client has connected to the server!');
                });

                webSocket.on('message',function(data) {
                    console.log('Received a message from the server!',data);
                });

                webSocket.on('disconnect',function() {
                    console.log('The client has disconnected!');
                });

                window.ws = webSocket;
            }());
        </script>
    </body>
</html>

控制台返回:
Unexpected response code: 404
XMLHttpRequest cannot load http://ws//test:8080/socket.io/xhr-polling//1303822796984. Origin http://test is not allowed by Access-Control-Allow-Origin.
1303822796984GET http://ws//test:8080/socket.io/xhr-polling//1303822796984 undefined (undefined)

我不知道问题出在哪里。

感谢您的帮助。

祝好!

3个回答

6
您正在尝试使用Socket.io直接连接WebSocket服务器。如果您只运行WebSocket服务器而不是Socket.io服务器,则可以使用普通的HTML5 API来连接WebSocket。
例如:
var ws = new WebSocket("ws://domain:port");
ws.onopen = function(){}
ws.onmessage = function(m){}
ws.onclose = function(){}

你使用的是哪个浏览器? WebSockets 目前只有 Google Chrome 支持。在其他浏览器上测试会失败。

如果我想发送消息而不必依赖于“onmessage”事件等,该怎么办? - keanu_reeves

1
你可能是想使用 'ws://push.xxx.binder.test' 而不是 'ws//push.xxx.binder.test'(缺少冒号). 这与编程有关。

0

变更

var webSocket = new io.Socket('ws//push.xxx.binder.test', {

var webSocket = new io.Socket('push.xxx.binder.test', {

对于 socket.io,您无需为您的域名添加前缀(尤其是在斜杠之前没有冒号的情况下)。此外,var webSocket 不是很好的命名 - socket.io 不仅可以使用 websockets(即使在您的错误中它也使用了 xhr-poliing


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接