• Jingxiao 置顶
    2019-08-01
    思考题答案:
    Websocket 可能丢包。TCP 协议保证了所有的包按顺序抵达(即使是乱序抵达,在前面的包收到之前,TCP 协议下的底层程序也会讲先到达的靠后的包缓存,直到前面的包抵达,才送给上层的应用程序),但是并不能保证不可恢复的错误发生的时候,包不会丢失。这种情况发生的时候,就会出现 Orderbook 中一个或多个(价格,数量)信息没得到及时更新。这种错误越积攒越多的情况下,就会导致本地的 Orderbook 充满垃圾信息,变得完全不可靠。因此一个很好的做法是,可以设置一个时间间隔,通过 RESTFul 或者其他方式重新抓一下 Orderbook 的 Snapshot,然后和本地的 Orderbook 进行比对,纠正错误。
    
     13
  • tt
    2019-07-29
    websocket包的安装使用如下命令:

    pip -m install websocket_client安装。

    pip -m install websocket会安装另外一个完全不同的包
    
     15
  • SCAR
    2019-07-29
    思考题:
    1. websocket基于tcp的,虽然协议上有纠错,重传和等待的机制,但一些特殊的情况还是可能会有丢包的情况,比如同时有超过服务器负载的客户端在请求数据。
    2.如果丢包的情况发生时,类似开大会会场人人都发微信图片,看着WiFi信号满格,却发不出去,差不多一样的道理爬虫也是收不到数据的。
    3.查了下websocket的WebSocketApp的函数,有个参数on_error,是websocket发生错误的时候触发的,那么我们可以编写这个对应的回调函数来让服务器重发或者其他有效的处理。

    作者回复: 👍

    
     12
  • tux
    2019-07-29
    干布球和tt 的提示,解决了报错。
    import websocket #pip install websocket-client
    import _thread as thread

    在查找资料时,看到了:
    import websocket
    try:
        import thread
    except ImportError:
        import _thread as thread
    展开
    
     4
  • SCAR
    2019-07-29
    尝试回答下Destroy的问题:
    查看WebsocketApp函数:
    on_message: callable object which is called when received data.
     on_message has 2 arguments.
     The 1st argument is this class object.
     The 2nd argument is utf-8 string which we get from the server.
    你如果直接on_message = self.on_message,那么会缺少第一个参数,因为class Crawler类里on_message(self,message)是缺少如最上面老师例子def on_message(ws, message)里的ws的。所以
    on_message = lambda ws, message: self.on_message(message)是通过lambda补上第一个参数ws。
    展开
     2
     4
  • 干布球
    2019-07-29
    第二段代码少了个import time,python3里面thread用import _thread,不知是不是这样?
     1
     3
  • ttttt
    2019-07-29
    websocket资料
    https://pypi.org/project/websocket_client/

    作者回复: 👍

    
     2
  • hel793
    2019-09-05
    Latency is 2630.9838048 ms
    
     1
  • Claywoow
    2019-08-04
    老师,请教个问题,为什么我把这两个类分成两个模块来测试的时候,程序会进入无响应的状态,好像一直在运行,这会是什么原因呢?
    
     1
  • Geek_adeba6
    2019-07-30
    想请问是否可以使用STOMP协议与Gemini这样的交易平台通信, 像消息队列rabbitmq 有 stomp的plugins

    作者回复: 理论上他可以这么做,但是 Gemini 目前官方只支持 RESTFul 和 Websocket,以及金融工程中经常用到的 FIX 协议,这些协议都有着广泛支持的开源库和经过充分时间验证的安全性,切换到新的协议没有太大必要,但是以后的事情谁也说不定呢

    
     1
  • Merlin
    2019-11-26
    对于web socket的编程,可以用asyncio,我觉得用asyncio来开发web socket更为方便

    作者回复: 嗯嗯

    
    
  • 小侠龙旋风
    2019-09-01
    最近在复习js的相关知识,js中socket.io库封装了websocket,同时也包含了其他连接方式,比如ajax。socket.on(event_name, callback)中的内置事件名有10种。https://socket.io/docs/client-api/
    
    
  • 小侠龙旋风
    2019-08-03
    会丢包,在on_error(ws, error)回调函数中做处理
    
    
  • jxs1211
    2019-08-03
    请问老师,下面代码中select.select是什么意思,这段代码主要起到什么作用
    class Dispatcher:
        def __init__(self, app, ping_timeout):
            self.app = app
            self.ping_timeout = ping_timeout

        def read(self, sock, read_callback, check_callback):
            while self.app.sock.connected:
                r, w, e = select.select(
                        (self.app.sock.sock, ), (), (), self.ping_timeout)
                if r:
                    if not read_callback():
                        break
                check_callback()
    展开
    
    
  • jxs1211
    2019-08-03
    实测on_message = self.on_message没有问题,源码中_callback中只是对回调函数做了类型判断,self.on_message是和method,所以直接将返回data给了形参message,执行接受数据的处理
    
    
  • _stuView
    2019-07-31
    我之前看到Linux公众号讲python并不是一个解释型语言,而是一个运行在虚拟机上的语言https://mp.weixin.qq.com/s/Yqwk_eXO1t5N2cjRz_u0sw

    作者回复: 如果一定要回答 Python 是不是解释型语言,那么答案是它是部分编译型语言。它和 Java 类似,不会像 C++ 一样编译到机器语言,而是编译成字节码来提高执行速度。https://stackoverflow.com/questions/6889747/is-python-interpreted-or-compiled-or-both

     1
    
  • enjoylearning
    2019-07-30
    既然是网络传输就一定会丢包,所以需要建一个队列
    
    
  • Destroy、
    2019-07-29
    因此,应该你注意到了,它的第一个参数是 self,这里如果直接写成 on_message = self.on_message 将会出错。
    为了避免这个问题,我们需要将函数再次包装一下。这里我使用了前面学过的匿名函数,来传递中间状态,注意我们只需要 message,因此传入 message 即可。
    这段没看懂,老师或者哪位大神能解释一下?
     2
    
  • jutsu
    2019-07-29
    有没有异步非阻塞这类的,非得websocket吗
    
    
  • 无法言喻.
    2019-07-29
    1.会丢包
    2.timeout错误
    3.用每次请求的数据量和数据时间进行对比
    不知道有没有说对1个:)
    
    
我们在线,来聊聊吧