我正在尝试使用Cramp框架创建一个最小的Websocket实现。当Cramp成功地呈现正常的网页内容时,当我尝试使用HTML5 websockets时,我遇到了麻烦。
我的action类如下:
Cramp::Websocket.backend = :thin
class HomeAction < Cramp::Action
self.transport = :websocket
keep_connection_alive
on_data :recv_data
def recv_data data
puts "got message"
puts "#{data}"
render "Hello world"
end
end我的javascript代码如下:
$(function(){
window.socket = new WebSocket("ws://localhost:3000/game");
socket.onmessage = function(evt){
console.log(evt.data);
socket.close();
}
socket.onclose = function(evt) {
console.log("end");
}
socket.onopen = function() {
console.log("Now open!");
socket.send("Hello");
}
})服务器(瘦)会检测何时发送数据,但读取的文本是乱码。
数据的编码为ASCII-8BIT (puts data.encoding打印"ASCII-8BIT")。但是,通过data.force_encoding(' UTF -8')强制使用UTF编码不能解决此问题。此外,在强制编码之后- data.valid_encoding?返回false,因为它在强制编码之前是真的。
我已经在ruby-1.8.7和ruby-1.9.3上测试了这个应用程序。这两个场景的输出是相同的。
另一件奇怪的事情是,在客户端,onmessage事件从来不会触发。
另外,如果我从HomeAction中删除了keep_connection_alive调用,那么在接收到数据之后连接就会立即终止,而且客户端仍然不会接收到服务器发送的数据("Hello world")。
我已经在Google chrome (最新版本)和Mozilla firefox (最新版本)上测试了这款应用。问题在这两个方面都是完全相同的。我的操作系统是Ubuntu 12.04 LTS (精确穿山甲)。
在这方面的任何帮助都将受到强烈的感谢。
发布于 2012-10-21 21:40:41
我一直在遇到同样的事情,似乎是因为发行版的cramp 0.15.1 gem与你从github repo (https://github.com/lifo/cramp)获得的东西相比仍然被标记为0.15.1。
尝试这个对我有效的实验:
宝石“抽筋”
包含代码的本地副本:
gemspec gem ' cramp ',:path File.dirname(__FILE__)
看起来要么是github的修复程序还没有发布(但还没有在他们的gemspec中增加工作版本),要么是一些其他版本的混乱,但无论哪种方式,GH中的代码都可以工作,而"gem install cramp“不会给你websockets的工作代码。
https://stackoverflow.com/questions/11952041
复制相似问题