带有 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 在路由文件中返回未定义
我们可以在 Node JS 应用程序中使用带有 ejs(嵌入式 javascript)的 socket.io 而不是 html 页面吗?