2012-05-25 45 views
0

我承认在服务器,Linux和websockets的所有东西中都是完整的noob。我终于设法建立了一个运行Apache,Tomcat和Railo的虚拟机,我可以连接并提供CFM页面,同时学习UNIX命令行导航,服务器原理等等...WebSockets noob与Railo合作

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

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

所以我有几个问题:什么是我最好的选择WebSocket服务器?我应该尝试使用Apache和/或Tomcat吗?人们总是说,像Node.js运行websockets部分和其他一些事情背后的重要举措完全不值得 - 这是为什么?如果我能够在正确的方向得到推动,一些优秀的教程(我似乎在这个部门找不到多少东西),或者就如何从这个部门找到很好的反馈,我更愿意用任何语言编写WS处理程序设立我的Linux机器来处理websockets - 最好是如何处理websockets和强大的语言如Railo。

回答

0

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

我使用的解决方案是Go。它非常快速,具有非常好的并发功能,并集成了websocket和json库(示例:http://gary.beagledreams.com/page/go-websocket-chat.html)。一个高效的Web应用程序服务器在几十行Go中生成。你会发现互联网上的文档数量远远少于java甚至node.js。

在java中有一些websockets的实现,但因为我正在切换java中的所有东西,所以我没有测试它们。我知道我在java中使用Google gson进行json编码,这非常好。

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编写的网络插座聊天服务器的完整演示。

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套接字服务器。该演示挂钩到三个回调:连接,消息接收和断开连接。

要注意,对我来说最重要的事情,是网络套接字协议支持文本而已,而不是二进制因此而延长,是为我自己的聊天应用我实现我自己的命令,以帮助控制服务器。在我的情况下,命令是这样的:“!”

!kickusers: username, another_username, a_third_username 

我的服务器代码将检查所有消息的第一个字符为如果有的话会把它当作命令。然后我切分字符串以获得命令“kickusers”和用户列表。然后我调用适当的踢球功能并将其传递给用户名数组。

因为我的方案是一个聊天客户端这意味着用户可以从字面上键入此命令进入聊天服务器会接受并作出回应。

,这一切都是我的部署服务器上的方式是像这样:

  • 我有当用户进入到那个位置我在他们的浏览器的服务器上的Apache服务index.html页面。 Apache在这里扮演的唯一目的是为要求的客户提供index.html。
  • index.html页面包含HTML显示聊天和JavaScript来发送和收到从服务器聊天/。基本上,index.html只是一个用HTML和Javascript编写的聊天客户端,它在浏览器中运行。
  • 我的服务器上运行,通过ssh server.php来启动WEB套接字服务器(Apache的完全独立),它只是坐在那里,并处理聊天类的东西呼应的文本所连接的其他客户等

虽然安装Apache和PHP的Arch wiki对安装Apache和PHP包的方式是特定的,但配置Apache和PHP的部分适用于所有。我会救你的谷歌查询,并在这里给你的链接,如果你喜欢:https://wiki.archlinux.org/index.php/LAMP

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