我正在尝试使用Cramp框架创建一个最小的Websocket实现。 在Cramp成功呈现正常Web内容的地方,当我尝试使用HTML5 websockets时遇到了麻烦。
我的动作类如下:
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,强制执行前为true。
我已经在ruby-1.8.7以及ruby-1.9.3中测试了应用程序。两种情况下的输出都相同。
另一个奇怪的事情是,在客户端,onmessage事件永远不会被触发。
此外,如果我从HomeAction中删除keep_connection_alive调用,则在收到数据后连接会立即终止,并且客户端仍然不会收到服务器发送的数据(“Hello world”)。
我已经在Google Chrome(最新版本)和Mozilla firefox(最新版本)中测试了该应用。问题在两者中都完全相同。我的操作系统是Ubuntu 12.04 LTS(Precise Pangolin)。
我们非常感谢您在这方面的任何帮助。
答案 0 :(得分:4)
我一直在遇到同样的事情,这似乎是一个问题,发布版本的抽筋0.15.1宝石与你从github repo获得的(https://github.com/lifo/cramp )思想仍然标记为0.15.1。
尝试这个适合我的实验:
更改您的gemfile,而不仅仅是
gem 'cramp'
包括代码的本地副本:
gemspec
gem 'cramp', :path => File.dirname(__FILE__)
删除你的Gemfile.lock并重新捆绑,看看捆绑包现在报告它将使用抽筋宝石的本地副本
看起来github中有一个修复它们还没有发布(但是没有增加gemspec中的工作版本)或者其他一些版本的snafu,但无论哪种方式GH中的代码都工作而“gem安装痉挛” “不会为你提供websockets的代码。