actioncable连接管理
一次对/cable的请求,就会创建一个ApplicationCable::Connection < ActionCable::Connection::Base,但Server不会持有此connection

connection包含WebSocket,而WebSocket包含ClientSocket


而ClientSocket包含Stream(Stream也持有ClientSocket)。
当调用connection的process时,实际上是调用ClientSocket的rack_response -> start_driver -> @stream.hijack_rack_socket

hijack_rack_socket所做的就是让Server中的event_loop去监听当前这个tcp_socket

event_loop是一个StreamEventLoop的对象,内含一个死循环的线程。该线程会先检查todo队列(内含增加监听和取消监听的指令),然后阻塞在nio监听。
当tcp_socket可读时,就会读出数据交给stream -> client_socket#parse



client_socket#parse实际上是将数据交由WebSocket::Driver去解析,然后根据解析结果回调触发client_socket去处理(例如寻找具体的Channel类去处理)

以上涉及的对象关系图如下
完整如下