Sinatra 一个用 Sinatra 写的 HTML 5 WebSocket 聊天室

kikyous · 2013年09月22日 · 最后由 posee 回复于 2018年10月03日 · 13743 次阅读

新地址: http://chat.saas.bdfzer.com/

使用:sinatra,eventmachine,bootstrap,websocket

现在功能还很简陋: 发送文本 插入表情 快捷键发送 频道功能

https://github.com/kikyous/websocket_chat

欢迎 pull request

开源吗,学习下

确实希望能学习下

求学习……

给我增加一点空间,哈哈 https://koding.com/?r=kikyous

感谢楼主

koding.com 真心不错啊

#8 楼 @cassiuschen 嗯嗯,一起合作 😄

网站都 已经 玩爆了~

#10 楼 @song940 嗯,小伙伴们的破坏力太强了,现在更新了一下,加了 element whitelist

cool , 我继续去破坏~

为啥进不去了=。=

#15 楼 @bydmm 他们的 vm15 分钟没请求就自动关闭了

#16 楼 @kikyous 请问 io 域名怎么注册的

#18 楼 @kikyous 楼主 qq 多少,问你点东西

#16 楼 @kikyous 他们的 vm15 分钟没请求就自动关闭了

意思是不是说只要每隔三分钟,自己去调用一下 web 请求,就可以当布署服务器来用了?

#21 楼 @hhuai 我在 vm 上设置了一个 crontab,每 10 分钟请求一下,但是没有起作用,不知道为什么

#22 楼 @kikyous 是不是应该由外网来调。注册两个帐号,互调。

#23 楼 @hhuai 其实我不清楚他们说的 inactive 是什么意思

#25 楼 @kikyous 可否加个简单的验证模块?然后如果可以最好能同时以页面内标签的方式同时打开多个……我昨天做 ui 的时候还想给你写回复说做 channel 来着…

#26 楼 @cassiuschen channel 这个是必须啊,呵呵

#26 楼 @cassiuschen 页内标签也可以考虑考虑

#26 楼 @cassiuschen 验证模块,是说用户注册吗?这个我觉得有利有弊

#28 楼 @kikyous 不是注册的那种,是进入某聊天室需要一个密码…我给你个 vps 用吧,私信

#30 楼 @cassiuschen 这个其实我是这么想的: 私有频道(比如频道名以下划线开始),因为频道名可以是一个很长的字符串,实际上已经有加密的功能了,只要不在 channels 展示,就不会有别人进去

#31 楼 @kikyous 嗯这倒是可以……那还得有新建 channel 的界面?另外 vps 信息发你邮箱了

#32 楼 @cassiuschen 现在有新建 channel 的页面啊, http://kikyous.kd.io:5000/channel 另外直接打 url 也行 http://kikyous.kd.io:5000/channel_name

#35 楼 @kikyous 没事机器闲着也是闲着……我又不用交钱 XD

#36 楼 @cassiuschen rvm 你装还是我来装?

#37 楼 @kikyous 现在 rvm 和 ruby 都装好了你用吧~给你 sudo 和 rvm 了

#39 楼 @kikyous 我怎么好像开不了端口啊,怎么搞

#40 楼 @kikyous 我查一下……你用 443 端口试试

#41 楼 @cassiuschen 443 可以,但是这个程序需要两个端口,另一个给 websocket 用

#42 楼 @kikyous 用 21……= =!太忧伤了早知道我给你另一台 vps 了那台开得多多了…

#43 楼 @cassiuschen 端口不能随意开吗?

#44 楼 @kikyous 学校有防火墙得申请……

#46 楼 @kikyous 你等会我给你另一台 vps 吧= =!东西倒是都装好了

#46 楼 @kikyous 好了…用 72.88 那台服务器吧……用户名密码不变……你用 3360 和 1438 两个端口

部署好了,http://211.68.72.88:3360/ 更新了 ui,加入了 private channel #49 楼 @cassiuschen

#51 楼 @kikyous 辛苦辛苦~明天我看看改改 css 啥的

#51 楼 @kikyous 给你了一个测试用域名吧……这么看 ip+ 端口太低端了…………chat.saas.bdfzer.com

#53 楼 @cassiuschen 嗯,我看看是要配置 nginx 是吧

啥时候设计下 UI , 参考下 : Omegle .

#56 楼 @song940 正在写……会参考的,谢谢~

增加了连接断开后的提示

加入了更多表情

增加了时间显示

这个要怎么运行?

koding 上运行 ruby -KU app.rb 只能监听 127.0.0.1

app.rb 里改了 App.run!({:host => '0.0.0.0', :port => 3360}) 没效果

#62 楼 @zgm -p 是指定端口吧?

-p -o 都试过还是没效果

#63 楼 @windwiny 原来用了 modular app 的方式

App.run!(port: 4460, bind: '0.0.0.0')

#64 楼 @zgm #60 楼 @kikyous

app.js 里面 ws = new WebSocket("ws://0.0.0.0:1438"); 这个是什么意思?IP 要自己改?

如果在云平台上,机器本身只能看到内网 IP,外网 IP 又不固定的,WebSocket 就用不了吧?

bundle install

Resolving dependencies...
Using addressable (2.2.7)
Using backports (3.3.4)
Using daemons (1.1.8)
Installing eventmachine (0.12.10)
Gem::Installer::ExtensionBuildError: ERROR: Failed to build gem native exte

    g:/RailsInstaller/Ruby2.0.0/bin/ruby.exe extconf.rb
checking for rb_trap_immediate in ruby.h,rubysig.h... no
checking for rb_thread_blocking_region()... yes
checking for inotify_init() in sys/inotify.h... no
checking for __NR_inotify_init in sys/syscall.h... no
checking for writev() in sys/uio.h... no
checking for rb_thread_check_ints()... yes
checking for rb_time_new()... yes
checking for windows.h... yes
checking for winsock.h... yes
checking for main() in -lkernel32... yes
checking for main() in -lrpcrt4... yes
checking for main() in -lgdi32... yes
checking for main() in -lssl... no
creating Makefile

make
generating rubyeventmachine-i386-mingw32.def
compiling binder.cpp
In file included from binder.cpp:20:0:
project.h:85:0: warning: "FD_SETSIZE" redefined
<command-line>:0:0: note: this is the location of the previous definition
compiling cmain.cpp
In file included from cmain.cpp:20:0:
project.h:85:0: warning: "FD_SETSIZE" redefined
<command-line>:0:0: note: this is the location of the previous definition
cmain.cpp: In function 'int evma_send_file_data_to_connection(long unsigned int, const char*)':
cmain.cpp:752:6: error: 'fstati64' was not declared in this scope
make: *** [cmain.o] Error 1

win7 上安装不上 eventmachine

#66 楼 @yakczh 试试 gem install eventmachine --pre

#68 楼 @kikyous Gemfile 是不是要改成 gem 'eventmachine','pre' ?

用 gem install eventmachine --pre 可以安装成功,但是 bundle install 还是显示

Installing eventmachine (0.12.10)

#69 楼 @yakczh 可以 gemfile 里面的 eventmachine 去掉

#71 楼 @kikyous 启动起为了,但是打开 ff/或者 chrome 都是弹窗提示 连接已断开,请刷新页面,刷新一下还是这个提示,控制台也不报异常

#72 楼 @yakczh 你 js 里面的地址改了没有?

#73 楼 @kikyous ws = new WebSocket("ws://0.0.0.0:1438"); 这是 app.js 里的 app.rb 里 EventMachine::WebSocket.start(:host => '0.0.0.0', :port => 1438) do |ws| 应该改成什么?

#74 楼 @yakczh 没错,这里就是这样

#75 楼 @kikyous 改成 localhost 一连接服务器就退出了,控制台报错 app.rb:97:in block (4 levels) in <main>': undefined methodheaders' for nil:NilClass (NoMethodError)

为啥看到 1438 我那么想笑……

#77 楼 @cassiuschen 来给这个项目起一个名字吧

更新了附件上传

kikyous 回复

被 test 了么:)

需要 登录 后方可回复, 如果你还没有账号请 注册新账号