带有 Node.js 和 socket.io 的 WebSockets

Posted

技术标签:

【中文标题】带有 Node.js 和 socket.io 的 WebSockets【英文标题】:WebSockets with Node.js and socket.io 【发布时间】:2011-12-27 20:17:54 【问题描述】:

我已经使用画布和 javascript 构建了一个游戏,我想使用 WebSockets 和 Node.js 实现多人游戏功能

我是 Node 的新手,我已经设法使用以下代码启动并运行了一个基本的 Web 服务器:

var http = require("http");

console.log("Server started at port 8888");

http.createServer(function(request, response) 
        response.writeHead(200, "Content-Type": "text/plain");
        response.write("Hello World");
        response.end();
).listen(8888);

一切正常,当我导航到端口 8888 上的服务器 IP 时,我得到了“Hello World”的响应。我的问题是,这就是我开始使用带有 Node 的 WebSockets 所需的全部内容吗?我听说有人说我仍然需要socket.io,以便Node可以使用套接字,但我不知道这是否只是一个帮助我使用套接字的库还是Node实际上无法理解套接字。

服务器基本上必须记录所有连接的玩家、他们的分数、他们在画布上的位置等。客户端会偶尔轮询服务器(使用 WebSockets)以获取每个人的位置,然后更新他们的画布返回的信息。我需要socket.io吗?不管怎样,我该怎么做呢?

谢谢。

【问题讨论】:

【参考方案1】:

两周前,我在Node.js & WebSocket - Simple chat tutorial 上发布了我的博客教程。 基本上,我拿了这个WebSocket module for Node.js,只是扩展了这个服务器模板(没有socket.io):

var WebSocketServer = require('websocket').server;
var http = require('http');

var server = http.createServer(function(request, response) 
    // process HTTP request. Since we're writing just WebSockets server
    // we don't have to implement anything.
);
server.listen(1337, function()  );

// create the server
wsServer = new WebSocketServer(
    httpServer: server
);

// WebSocket server
wsServer.on('request', function(request) 
    var connection = request.accept(null, request.origin);

    // This is the most important callback for us, we'll handle
    // all messages from users here.
    connection.on('message', function(message) 
        if (message.type === 'utf8') 
            // process WebSocket message
        
    );

    connection.on('close', function(connection) 
        // close user connection
    );
);

如果您正在开发多人游戏,您可能有兴趣讨论 html5 Games with Rob Hawkes of Mozilla(他描述了他开发基于 WebSocket 的多人游戏的经验)和文章 Developing Multiplayer HTML5 Games with Node.js(有一段关于在 Node.js 和前端)。

【讨论】:

【参考方案2】:

你需要 socket-io 因为那是一个建立在 node js 之上的库。 Socket io create 是一个“套接字”,因此数据可以从 Web 应用程序传输到服务器,反之亦然。 node js 只是你服务器的一个 javascript 接口。

这里有关于如何设置 socket-io 的信息:

Installing/setting up Socket.IO on my server

【讨论】:

以上是关于带有 Node.js 和 socket.io 的 WebSockets的主要内容,如果未能解决你的问题,请参考以下文章

带有Node.js的HTML5画布,集群和Socket.IO

带有 Node.js/Socket.IO 服务器和客户端的 Phonegap 应用程序中的 Android 的 WebSockets

尝试发出时,带有 Node.js 的 Socket.io 在路由文件中返回未定义

多人 HTML5、Node.js、Socket.IO

我们可以在 Node JS 应用程序中使用带有 ejs(嵌入式 javascript)的 socket.io 而不是 html 页面吗?

在 Firefox 中运行 node.js 和 socket.io 时出现 CORS 错误