使用 NodeJS 的简单 WebSocket 应用程序

Posted

技术标签:

【中文标题】使用 NodeJS 的简单 WebSocket 应用程序【英文标题】:Simple WebSocket application with NodeJS 【发布时间】:2015-05-13 17:17:12 【问题描述】:

我要做一个简单的 WebSocket 应用程序等待客户端连接。客户端是 android 用户,应用程序本身是两个人的简单聊天。因此,对于 Android 应用程序,我需要知道 WebSocket 地址(以 ws://wss:// 开头)。我已经有一些网站,我在其中安装 nodejs。但是几天后,我完全坚持了正在发生的事情以及如何使某些事情起作用。我什至会很高兴看到 nodejs 捕获任何 WebSocket 消息,仅此而已。

我阅读了一些关于 nodejs 和 socket.io 的手册,但我还是不知道从哪里获得那个 ws:// 地址并让它以某种方式工作。

例如,从socket.io chat manual,我们有:

var app = require('express')();
var http = require('http').Server(app);
var io = require('socket.io')(http);

app.get('/', function(req, res)
  res.sendfile('index.html');
);

io.on('connection', function(socket)
  console.log('a user connected');
);

http.listen(3000, function()
  console.log('listening on *:3000');
);

这已经是简单的 websocket 应用程序了吗?在这种情况下,我想要的 ws:// 地址在哪里?也许我应该只在我的服务器上上传那一堆代码并将查询发送到 ws://mydomain.com:3000

【问题讨论】:

【参考方案1】:

如果您在服务器上使用socket.io 库,那么您也必须在客户端使用socket.io 兼容库,因为它是webSocket 之上的协议,因此两端必须使用相同的语言。

webSockets(和本例中的 socket.io)是为共享您的网络服务器而构建的。因此,任何到您服务器的 webSocket 连接请求都只会发送到与您的网络服务器相同的主机和端口。

每个 webSocket 请求都以一个 http 请求开始(因此它由您的 Web 服务器处理),并且该 http 请求作为其中的标头请求升级到 webSocket 协议。当您的 Web 服务器看到该自定义标头时,它会将控制权传递给 socket.io 库,然后该库会响应升级到 webSocket 协议是正常的,并且最初作为 http 请求的套接字现在变成了应用会说 webSocket/socket.io。

socket.io 库会自动处理插入您的网络服务器,以便查看这些协议升级请求。

在网页中,连接到此的 socket.io 客户端代码如下所示:

<script src="/socket.io/socket.io.js"></script>
<script>

var socket = io();  
socket.on('connect', function() 
    // socket.io webSocket connection with your server is now established
);

</script>

socket.io 库将自动连接回网页来源的同一主机。您甚至不需要输入 URL。

【讨论】:

谢谢。但是,如果我有 Android 应用程序并且它没有放在同一台服务器上(我认为在 Placemarket 的某个地方)怎么办。我猜 socket.io 不是这个目的的正确选择,但是什么是正确的? 有一个库可以用于Android socket.io 客户端github.com/nkzawa/socket.io-client.java。看看这篇文章:socket.io/blog/native-socket-io-and-android @JamesMay - 如果需要,您可能会找到适用于 Android 的 socket.io 兼容客户端库。我发现 socket.io 让 webSockets 更容易使用,所以这可能是一条好路。您对 socket.io 兼容的 Android 库的编程方式完全取决于您使用哪个库以及它是如何工作的。 socket.io 网站目前似乎有问题,但他们在这里讨论了原生 android 应用程序:socket.io/blog/native-socket-io-and-android

以上是关于使用 NodeJS 的简单 WebSocket 应用程序的主要内容,如果未能解决你的问题,请参考以下文章

使用nodejs创建加入用户验证的websocket服务

ini 具有websocket支持的nodejs最简单的nginx站点配置

WebSocket 学习--用nodejs搭建服务器

Node开发websocket爬虫的经验

在 NodeJS 中将 WebSocket 连接到 WebSocketServer

websocket 服务器怎么启动