node.js socket.io简单聊天

Die*_*ias 7 node.js socket.io

我开始玩node.js和大家一样,我想聊聊天.

我的想法是在端口9090中使用socket.io运行node.js,在端口8080中运行我的客户端html.我的html客户端将独立提供服务.

我的服务器:

var sys = require('sys');
var express = require('express');
var io = require('socket.io');

var app = express.createServer();

app.listen(8080);

var socket = io.listen(app);

socket.on('connection', function (client) {
    client.on('message', function (msg) {
        socket.broadcast(msg);
    });
    client.on('disconnect', function () {
    });
});
Run Code Online (Sandbox Code Playgroud)

我的客户:

<!DOCTYPE html>
<html>
    <head>
        <script src="http://ajax.googleapis.com/ajax/libs/jquery/1.6.2/jquery.min.js"></script>
        <script src="http://cdn.socket.io/stable/socket.io.js"></script>
        <script>
            $(document).ready(function () {
                var socket = new io.Socket("localhost", {port: 8080});

                socket.on('connect', function () {
                    socket.send('A client connected.');
                });
                socket.on('message', function (message) {
                    $('div#messages').append($('<p>'), message);
                });
                socket.on('disconnect', function () {
                    console.log('disconnected');
                });
                socket.connect();

                $('input').keydown(function (event) {
                    if(event.keyCode === 13) {
                        socket.send($('input').val());
                        $('input').val('');
                    }
                });
            });
        </script>
    </head>
    <body>
        <input type="text" style="width: 300px;" />
        <div id="messages" style="border:solid 1px #000;">&nbsp;</div>
    </body>
</html>
Run Code Online (Sandbox Code Playgroud)

我正在使用node.js v0.4.10在ubuntu 11.04中运行.

服务器工作正常,但客户端无法连接,在google Chrome上的console.log中我收到此消息:XMLHttpRequest无法加载http:// localhost:8080/socket.io/xhr-polling // 1311465961485.Access-Control-Allow-Origin不允许使用origin http:// localhost.

server.js位于/ var/www/cliente/chat/public中的文件夹中.

有什么问题?

zee*_*kay 5

您实际上并未根据需要从端口8080提供客户端代码.

var sys = require('sys');
var express = require('express');
var io = require('socket.io');

var app = express.createServer();
app.listen(8080);
app.use(express.static(__dirname));

app.get('/', function(req, res){
    res.render('index.html', { title: 'Chat' });
});

var socket = io.listen(app);

socket.on('connection', function (client) {
    client.on('message', function (msg) {
        socket.broadcast(msg);
    });
    client.on('disconnect', function () {
    });
});
Run Code Online (Sandbox Code Playgroud)

这应该修复您的Access-Control-Allow-Origin错误.执行node server.js并连接到http:// localhost:8080.一些额外的说明:

  1. 确保你已经安装了socket.io 0.6.x,因为这就是你在html文件中所包含的内容.0.7.x向后兼容.

  2. 使用此配置,您将在为您的页面提供服务的同一端口上运行socket.io(而不是9090).


Dan*_*man 0

您无法向与当前页面不在同一主机名和端口上的 URL 发出 AJAX 请求。这是所有网络浏览器中的安全限制。