前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >【踩坑】因为这几行代码,我都快把键盘敲烂了!

【踩坑】因为这几行代码,我都快把键盘敲烂了!

原创
作者头像
林小帅
修改2019-09-05 18:16:47
1.7K0
修改2019-09-05 18:16:47
举报
文章被收录于专栏:林小帅的专栏林小帅的专栏

之前因为把服务器借给朋友试验项目,没想到居然把我几个在线的项目玩挂了。

(可能是因为进行了重启,然后没有启动项目)

在我对项目进行检查后,准备手动进行重启项目服务的时候,发现我对Linux的命令陌生了许多,难过!

不过还好去重新查了一下 nohup& 命令后,又把项目挂载在后台了。

不过这中间有个小插曲:

我在项目文件根目录使用 nohup path 后日志正常。

尝试 使用 curl 访问,服务错误 502。我还以为是 nginx 没重启的原因然后使用 nginx -s relaod 后再次访问还是服务错误 502

我就去查 nohup 日志发现找不到 webtemplate 的路径

哎呦!这就奇怪了。我以为是 nohup 的命令问题没正常执行程序,然后有又尝试了多次,用 netstat -anlp | grep 80xx 一查服务是已经起来了的。

果断baidu一波(不会鄙视我吧?),emmmmm……这些 Copy & Paste 的文章……算了。

实在没法,找不到突破口,然后想着看看之前的命令行记录,会不会忽略了什么东西。

果断翻命令行日志……发现其中一条 cd 到项目当前目录,再结合之前的日志是找不到路径……(不会是要到目录下执行才能正确找到路径?)先尝试一下再说。

代码语言:javascript
复制
cd /xxx(nohup ./danmu) >/xxx/danmu/nohup.out 2>&1 &
curl 127.0.0.1:80xx 200 ok

居……居然成功了?(难道我当时写的 webtemplate loadFolder 是从运行环境路径寻找,而不是项目路径?)着实自己坑了自己一把!(这个仇我记下了!哼!)

好了,服务的事情就告一段落了,现在就要来验证功能是否完全了。

之前写了一个 弹幕系统 来试一试弹幕还 Ok不Ok。

劈里啪啦劈里啪啦一顿乱输,发送弹幕!!!

完美!   毫无反应!!   I am fine!!!

打开F12 一看!websocket pending!!!然后返回了 400

一脸懵逼,然后打开 websocket http 的请求一看,发现请求头出现了 Provisional headers are shown 这是什么鬼,我没见过吖。

然后 baidu + google 了一波。发现碰到这个问题的人挺多的,但大多数是后端的代码问题(搞Java的人怎么这么多???)。

燃鹅!这些答案没有一个回答到点子上的!!!

我不服!然后我就赶紧的翻了一下之前写的 golang websocket 代码发现没这个问题吖。

好,确认了不是代码的问题后,就可以考虑其他方面了,话不多说直接就奔着 websocket 的官方文档去查。

最后发现因为是 WebSockets规范 已经更新了 RFC 6455,上一版本的规范对WebSocket握手过程 的请求头信息没做太多的硬性要求,忽略也是安全的

但是在新版本中,应该要:

客户端将发送一个相当标准的HTTP请求,看起来像这样(HTTP版本必须是1.1或更高,方法必须是GET)

所以这样一来就对服务端的开发者有一定的要求了。好的,既然知道了问题所在,那么解决问题就简单多了。

因为之前的我服务出口是使用了 nginx 进行反向代理,所以就可以在 nginx 配置的服务反向代理中添加新的配置信息。

代码语言:javascript
复制
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
代码语言:javascript
复制
nginx -s reload

F5 走一波,劈里啪啦劈里啪啦一顿乱输,郑其事的按下回车(坚信大力出奇迹)

幕  !!!

我都要感动得流下了眼泪。

想要玩玩弹幕的可以访问:t.eyufax.com/dm

UI 没兼容移动端!没兼容移动端!没兼容移动端!

总结:

  1. 检查问题一定要循序渐进,不要直接插入问题,不然容易掉入自我怀疑的漩涡。
  2. 有时候不一定是代码出现了问题,特别是一些较新的技术、API或规范进行了更新,就需要适当的修改。(html5 以及一些相关的API 和 部分规范还在不断更新中,出现问题可以查阅官方文档)
  3. 不要急躁,慢慢思考,如果条件允许,则可以翻阅下历史看看自己到底做了什么。
  4. 写代码的时候一定不能懒,必要的地方一定要写注释和输出日志信息,不然以后难以维护,时间一长你自己都可能不知道当时自己干了些啥?(我是谁?我在哪?这是啥?这又是啥?)

参考:

MDN 编写 WebSocket 服务器:  https://developer.mozilla.org/zh-CN/docs/Web/API/WebSockets_API/Writing_WebSocket_servers WebSockets规范 RFC 6455: http://datatracker.ietf.org/doc/rfc6455/?include_text=1

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档