Skip to content

Commit

Permalink
Separate out raw WebSocket protocol handling
Browse files Browse the repository at this point in the history
  • Loading branch information
ossman committed Feb 1, 2017
1 parent 4099949 commit 8a69762
Show file tree
Hide file tree
Showing 9 changed files with 1,968 additions and 1,305 deletions.
4 changes: 2 additions & 2 deletions tests/echo.py
Expand Up @@ -12,7 +12,7 @@

import os, sys, select, optparse, logging
sys.path.insert(0,os.path.join(os.path.dirname(__file__), ".."))
from websockify.websocket import WebSocketServer, WebSocketRequestHandler
from websockify.websocketserver import WebSocketServer, WebSocketRequestHandler

class WebSocketEcho(WebSocketRequestHandler):
"""
Expand Down Expand Up @@ -48,7 +48,7 @@ def new_websocket_client(self):
cqueue.extend(frames)

if closed:
self.send_close()
break

if __name__ == '__main__':
parser = optparse.OptionParser(usage="%prog [options] listen_port")
Expand Down
70 changes: 70 additions & 0 deletions tests/echo_client.py
@@ -0,0 +1,70 @@
#!/usr/bin/env python

import os
import sys
import optparse
import select

sys.path.insert(0,os.path.join(os.path.dirname(__file__), ".."))
from websockify.websocket import WebSocket, \
WebSocketWantReadError, WebSocketWantWriteError

parser = optparse.OptionParser(usage="%prog URL")
(opts, args) = parser.parse_args()

try:
if len(args) != 1: raise
URL = args[0]
except:
parser.error("Invalid arguments")

sock = WebSocket()
print("Connecting to %s..." % URL)
sock.connect(URL)
print("Connected.")

def send(msg):
while True:
try:
sock.sendmsg(msg)
break
except WebSocketWantReadError:
msg = ''
ins, outs, excepts = select.select([sock], [], [])
if excepts: raise Exception("Socket exception")
except WebSocketWantWriteError:
msg = ''
ins, outs, excepts = select.select([], [sock], [])
if excepts: raise Exception("Socket exception")

def read():
while True:
try:
return sock.recvmsg()
except WebSocketWantReadError:
ins, outs, excepts = select.select([sock], [], [])
if excepts: raise Exception("Socket exception")
except WebSocketWantWriteError:
ins, outs, excepts = select.select([], [sock], [])
if excepts: raise Exception("Socket exception")

counter = 1
while True:
msg = "Message #%d" % counter
counter += 1
send(msg)
print("Sent message: %r" % msg)

while True:
ins, outs, excepts = select.select([sock], [], [], 1.0)
if excepts: raise Exception("Socket exception")

if ins == []:
break

while True:
msg = read()
print("Received message: %r" % msg)

if not sock.pending():
break
14 changes: 6 additions & 8 deletions tests/load.py
Expand Up @@ -8,7 +8,7 @@

import sys, os, select, random, time, optparse, logging
sys.path.insert(0,os.path.join(os.path.dirname(__file__), ".."))
from websockify.websocket import WebSocketServer, WebSocketRequestHandler
from websockify.websocketserver import WebSocketServer, WebSocketRequestHandler

class WebSocketLoadServer(WebSocketServer):

Expand All @@ -35,12 +35,10 @@ def new_websocket_client(self):
self.send_cnt = 0
self.recv_cnt = 0

try:
self.responder(self.request)
except:
print "accumulated errors:", self.errors
self.errors = 0
raise
self.responder(self.request)

print "accumulated errors:", self.errors
self.errors = 0

def responder(self, client):
c_pend = 0
Expand All @@ -62,7 +60,7 @@ def responder(self, client):
print err

if closed:
self.send_close()
break

now = time.time() * 1000
if client in outs:
Expand Down

0 comments on commit 8a69762

Please sign in to comment.