AppRTC搭建房间服务器,使用的是google自家的google_appengine,就是实现https web服务器,是基于python开发的。把这个运行起来,在浏览器上访问,有时候不小心,把https错敲成http,结果访问https的端口,就把房间服务器给搞崩了。错误如下:
Exception in thread WSGI select:
Traceback (most recent call last):
File "/usr/lib/python2.7/threading.py", line 801, in __bootstrap_inner
self.run()
File "/usr/lib/python2.7/threading.py", line 754, in run
self.__target(*self.__args, **self.__kwargs)
File "/root/google_appengine/google/appengine/tools/devappserver2/wsgi_server.py", line 166, in _loop_forever
self._select()
File "/root/google_appengine/google/appengine/tools/devappserver2/wsgi_server.py", line 188, in _select
fd_to_callback[fd]()
File "/root/google_appengine/lib/cherrypy/cherrypy/wsgiserver/wsgiserver2.py", line 1902, in tick
s, ssl_env = self.ssl_adapter.wrap(s)
File "/root/google_appengine/lib/cherrypy/cherrypy/wsgiserver/ssl_builtin.py", line 52, in wrap
keyfile=self.private_key, ssl_version=ssl.PROTOCOL_TLS)
File "/usr/lib/python2.7/ssl.py", line 931, in wrap_socket
ciphers=ciphers)
File "/usr/lib/python2.7/ssl.py", line 599, in __init__
self.do_handshake()
File "/usr/lib/python2.7/ssl.py", line 828, in do_handshake
self._sslobj.do_handshake()
SSLError: [SSL: HTTP_REQUEST] http request (_ssl.c:727)
这个错误出现后,房间服务器就不能访问了,只有重新启动它。追踪到这个问题的的源头是:/YourPath/google_appengine/lib/cherrypy/cherrypy/wsgiserver/ssl_builtin.py,它在做异常处理的时候,有一句:
if e.args[1].endswith('http request'):
但这个异常信息字符串并不是以'http request'结尾的,结果就走不进去,继续把异常往外抛。
把这句改为:
if "http request" in e.args[1]:
问题解决,再也不会因为这个问题把房间服务器搞挂掉了。
如果在浏览器里尝试以http地址去访问的ssl端口,出来下面的提示信息:
The client sent a plain HTTP request, but this server only speaks HTTPS on this port.