使用节点js库Socket io没有端口

时间:2014-02-13 14:21:03

标签: javascript node.js sockets websocket socket.io

所以我是nodeJs和socket io的完全初学者。我在服务器上安装了两个例子chat application

所以它就像..如果我访问http://domain.com:3000一切正常......但是有可能只在其他地方上传index.html例如http://domain.com/chat/并在客户端插入如下代码文件。

 var connection = new WebSocket('ws://domain.com:3000');

我的客户代码

<html>
<head>
    <title>Chat with socket.io and node.js</title>
    <style>
        #chat{
            height:500px;
        }
    </style>
</head>
<body>
    <div id="chat"></div>
    <form id="send-message">
        <input size="35" id="message"></input>
        <input type="submit"></input>
    </form>

    <script src="http://code.jquery.com/jquery-latest.min.js"></script>
    <script src="/socket.io/socket.io.js"></script>
    <script>
        jQuery(function($){
            var socket = io.connect();
            var $messageForm = $('#send-message');
            var $messageBox = $('#message');
            var $chat = $('#chat');

            $messageForm.submit(function(e){
                e.preventDefault();
                socket.emit('send message', $messageBox.val());
                $messageBox.val('');
            });

            socket.on('new message', function(data){
                $chat.append(data + "<br/>");
            });
        });
    </script>
</body>
</html>

我的服务器代码

var express = require('express'),
    app = express(),
    server = require('http').createServer(app),
    io = require('socket.io').listen(server);

server.listen(3000);

app.get('/', function(req, res){
    res.sendfile(__dirname + '/index.html');
});

io.sockets.on('connection', function(socket){
    socket.on('send message', function(data){
        io.sockets.emit('new message', data);
    });
});

1 个答案:

答案 0 :(得分:2)

您应该考虑使用nginx作为反向代理。将nginx放在前面有很多好处,比如能够快速提供静态文件的能力。它还经过测试,针对高并发性而构建,并使用相同的基于事件循环的I / O方法。如果您想扩展自己的应用,可以轻松设置nginx以在应用群集之间实现负载平衡。

如果您想维护一个完整的Nodejs堆栈,您还可以查看node-http-proxy并将其用作反向代理/负载均衡器。但是,由于需要通过用户空间进行文件访问,因此nodejs对于静态文件的效率并不高。 nginx使用sendfile(1)绕过用户空间并直接使用内核。

TL;博士

您需要反向代理