0

诚然,我在所有服务器、Linux 和 websockets 方面都是一个完全的菜鸟。我终于设法建立了一个运行 Apache、Tomcat 和 Railo 的 VM,我可以连接到它并提供 CFM 页面,同时学习 UNIX 命令行导航、服务器理论等……

这是我的问题——只有一个 Railo websocket 扩展,而且它是超级 rinky-dink(我不得不修改 CFC 才能启动服务)但我无法建立 websocket 连接(我不断得到“意外谷歌浏览器中的代码 200")。文档很少,根本没有帮助。

基本上,我正在尝试为将使用 websockets 的未来项目做一些原型设计。我喜欢 Railo 的速度、安全性和出色的数据库繁重操作能力。我对 Node 很感兴趣,但不知道如何从 Javascript 中获得与 CFML 相同的安全性和 DB 功能。

所以我有几个问题:WebSocket 服务器的最佳选择是什么?我应该尝试使用 Apache 和/或 Tomcat 吗?人们一直在说,让 Node.js 之类的东西运行 websockets 部分而让其他东西在它背后做繁重的工作是完全不值得的——这是为什么呢?我非常乐意用任何语言编写 WS 处理程序,只要我能在正确的方向上获得推动、一些优秀的教程(我似乎在这个部门找不到太多),或者关于如何使用的良好反馈,来自从头开始,设置我的 Linux 机器来处理 websockets——最好是如何处理 websockets 和像 Railo 这样的健壮语言。

4

3 回答 3

3

Railo 扩展对我来说很好用。提交一些测试代码以便我们调试它怎么样?当然,websockets 项目还很年轻并且正在全面部署中。因此,请随时 fork 并提交补丁或建议。你有很多选择:

于 2012-05-26T13:29:26.297 回答
0

“意外代码 200”是由 Railo 的 Web 套接字服务器发送过时的响应引起的。他们更改了网络套接字规范,Chrome 使用了更新的规范。

The problem seems to be caused by chrome & co implementing the new spec, "draft-ietf-hybi-thewebsocketprotocol-17". It requires the server to respond with "HTTP/1.1 101 Switching Protocols" rather than 200 OK.

这里的解决方案是自己更新 Railo Web 套接字扩展或使用其他解决方案:

这是一个用 PHP 编写的 web socket 聊天服务器的完整演示。

http://www.flynsarmy.com/2012/02/php-websocket-chat-application-2-0/

我自己用它来实现一个实时的 HTML 聊天,它由我躺在身边的 Arch Linux 机器提供服务。配置包括简单地设置 Apache 和 PHP,然后将 index.html 和 server.php 中的 IP 地址更改为服务器机器的外部 IP 地址。

这个 flynsarmy 演示包括最新版本的 PHPWebSocket,它是一个完全用 PHP 编写并包含在单个文件中的开源 Web 套接字服务器。演示挂钩到三个回调:连接、收到消息和断开连接。

对我来说,需要注意的重要一点是,Web 套接字协议仅支持文本,而不支持二进制,因此在为我自己的聊天应用程序扩展它时,我必须实现自己的命令来帮助控制服务器。在我的例子中,命令如下所示:

!kickusers: username, another_username, a_third_username

我的服务器代码会检查所有消息的第一个字符是否有“!” 如果存在,会将其视为命令。然后我将字符串切分以获得命令“kickusers”和要踢的用户列表。然后我调用适当的 kick 函数并将用户名数组传递给它。

因为我的场景是一个聊天客户端,这意味着用户可以在聊天中直接输入这个命令,服务器会接受并响应它。

所有这些部署在我的服务器上的方式是这样的:

  • 当用户在浏览器中访问我服务器上的那个位置时,我让 Apache 为 index.html 页面提供服务。Apache 在这里的唯一目的是将 index.html 提供给请求它的客户端。
  • index.html 页面包含用于显示聊天的 html 和用于向服务器发送和从服务器接收聊天的 javascript。基本上,index.html 只是一个用 HTML 和 Javascript 编写的聊天客户端,它在浏览器中运行。
  • 我通过服务器上的 ssh 运行 server.php 以启动 WEB SOCKET 服务器(与 Apache 完全分离),它就坐在那里并处理聊天内容,例如向其他连接的客户端回显文本等。

尽管有关安装 Apache 和 PHP 的 Arch wiki 以您安装 Apache 和 PHP 包的方式特定于 Arch,但有关配置 Apache 和 PHP 的部分适用于所有人。如果您愿意,我会为您保存 google 查询并在此处给您链接:https ://wiki.archlinux.org/index.php/LAMP

至于原型,我提供 Flynsarmy 聊天演示链接的原因是因为他的评论很有帮助,他写了一篇关于它的博客,这是一个非常简单但完整的示例,说明了如何在 php 中使用 web sockets 做一些事情。

于 2012-05-25T21:06:33.107 回答
0

node.js 的主要问题是它是单线程的:您将无法使用它执行后台任务,并且本地 IO 会阻塞您的服务器。

我使用的解决方案是Go。它非常快,具有非常好的并发特性,并且集成了 websocket 和 json 库(示例: http: //gary.beagledreams.com/page/go-websocket-chat.html)。一个高效的 Web 应用程序服务器是用几十行 Go 语言构建的。你会发现互联网上的文档仍然比 java 甚至 node.js 少得多。

java中有一些websockets的实现,但是由于我正在将java中的所有内容切换到Go,所以我没有测试它们。我知道我在 java 中使用 Google gson 进行 json 编码,它非常好。

于 2012-05-25T19:33:33.723 回答