Skip to content

Commit 5bb6c9d

Browse files
Cleaned up the interface to provide a custom client manager
1 parent ad12b83 commit 5bb6c9d

File tree

3 files changed

+33
-35
lines changed

3 files changed

+33
-35
lines changed

examples/latency.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
import socketio
44

55
# set this to 'threading', 'eventlet', or 'gevent'
6-
async_mode = 'eventlet'
6+
async_mode = 'threading'
77

88
sio = socketio.Server(async_mode=async_mode)
99
app = Flask(__name__)

socketio/server.py

Lines changed: 8 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -13,12 +13,10 @@ class Server(object):
1313
This class implements a fully compliant Socket.IO web server with support
1414
for websocket and long-polling transports.
1515
16-
:param engineio_options: A ``dict`` with options for the Engine.IO server.
17-
The values are passed directly to the
18-
``engineio.Server`` constructor.
19-
:param client_manager_class: The class that will manage the client list.
20-
The default value is appropriate for most
21-
cases.
16+
:param client_manager: The client manager instance that will manage the
17+
client list. By default the client list is stored
18+
in an in-memory structure, which prevents the use
19+
of multiple worker processes.
2220
:param logger: To enable logging set to ``True`` or pass a logger object to
2321
use. To disable logging set to ``False``.
2422
:param binary: ``True`` to support binary payloads, ``False`` to treat all
@@ -62,11 +60,11 @@ class Server(object):
6260
a logger object to use. To disable logging set to
6361
``False``.
6462
"""
65-
def __init__(self, client_manager_class=None, logger=False, binary=False,
63+
def __init__(self, client_manager=None, logger=False, binary=False,
6664
json=None, **kwargs):
67-
if client_manager_class is None:
68-
client_manager_class = base_manager.BaseManager
69-
self.manager = client_manager_class(self)
65+
if client_manager is None:
66+
client_manager = base_manager.BaseManager(self)
67+
self.manager = client_manager
7068
engineio_options = kwargs
7169
engineio_logger = engineio_options.pop('engineio_logger', None)
7270
if engineio_logger is not None:

tests/test_server.py

Lines changed: 24 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -20,9 +20,9 @@ def tearDown(self):
2020

2121
def test_create(self, eio):
2222
mgr = mock.MagicMock()
23-
s = server.Server(mgr, binary=True, foo='bar')
24-
mgr.assert_called_once_with(s)
23+
s = server.Server(client_manager=mgr, binary=True, foo='bar')
2524
eio.assert_called_once_with(**{'foo': 'bar'})
25+
self.assertEqual(s.manager, mgr)
2626
self.assertEqual(s.eio.on.call_count, 3)
2727
self.assertEqual(s.binary, True)
2828

@@ -44,71 +44,71 @@ def bar():
4444

4545
def test_emit(self, eio):
4646
mgr = mock.MagicMock()
47-
s = server.Server(client_manager_class=mgr)
47+
s = server.Server(client_manager=mgr)
4848
s.emit('my event', {'foo': 'bar'}, 'room', '123', namespace='/foo',
4949
callback='cb')
5050
s.manager.emit.assert_called_once_with('my event', {'foo': 'bar'},
5151
'/foo', 'room', '123', 'cb')
5252

5353
def test_emit_default_namespace(self, eio):
5454
mgr = mock.MagicMock()
55-
s = server.Server(client_manager_class=mgr)
55+
s = server.Server(client_manager=mgr)
5656
s.emit('my event', {'foo': 'bar'}, 'room', '123', callback='cb')
5757
s.manager.emit.assert_called_once_with('my event', {'foo': 'bar'}, '/',
5858
'room', '123', 'cb')
5959

6060
def test_send(self, eio):
6161
mgr = mock.MagicMock()
62-
s = server.Server(client_manager_class=mgr)
62+
s = server.Server(client_manager=mgr)
6363
s.send('foo', 'room', '123', namespace='/foo', callback='cb')
6464
s.manager.emit.assert_called_once_with('message', 'foo', '/foo',
6565
'room', '123', 'cb')
6666

6767
def test_enter_room(self, eio):
6868
mgr = mock.MagicMock()
69-
s = server.Server(client_manager_class=mgr)
69+
s = server.Server(client_manager=mgr)
7070
s.enter_room('123', 'room', namespace='/foo')
7171
s.manager.enter_room.assert_called_once_with('123', '/foo', 'room')
7272

7373
def test_enter_room_default_namespace(self, eio):
7474
mgr = mock.MagicMock()
75-
s = server.Server(client_manager_class=mgr)
75+
s = server.Server(client_manager=mgr)
7676
s.enter_room('123', 'room')
7777
s.manager.enter_room.assert_called_once_with('123', '/', 'room')
7878

7979
def test_leave_room(self, eio):
8080
mgr = mock.MagicMock()
81-
s = server.Server(client_manager_class=mgr)
81+
s = server.Server(client_manager=mgr)
8282
s.leave_room('123', 'room', namespace='/foo')
8383
s.manager.leave_room.assert_called_once_with('123', '/foo', 'room')
8484

8585
def test_leave_room_default_namespace(self, eio):
8686
mgr = mock.MagicMock()
87-
s = server.Server(client_manager_class=mgr)
87+
s = server.Server(client_manager=mgr)
8888
s.leave_room('123', 'room')
8989
s.manager.leave_room.assert_called_once_with('123', '/', 'room')
9090

9191
def test_close_room(self, eio):
9292
mgr = mock.MagicMock()
93-
s = server.Server(client_manager_class=mgr)
93+
s = server.Server(client_manager=mgr)
9494
s.close_room('room', namespace='/foo')
9595
s.manager.close_room.assert_called_once_with('/foo', 'room')
9696

9797
def test_close_room_default_namespace(self, eio):
9898
mgr = mock.MagicMock()
99-
s = server.Server(client_manager_class=mgr)
99+
s = server.Server(client_manager=mgr)
100100
s.close_room('room')
101101
s.manager.close_room.assert_called_once_with('/', 'room')
102102

103103
def test_rooms(self, eio):
104104
mgr = mock.MagicMock()
105-
s = server.Server(client_manager_class=mgr)
105+
s = server.Server(client_manager=mgr)
106106
s.rooms('123', namespace='/foo')
107107
s.manager.get_rooms.assert_called_once_with('123', '/foo')
108108

109109
def test_rooms_default_namespace(self, eio):
110110
mgr = mock.MagicMock()
111-
s = server.Server(client_manager_class=mgr)
111+
s = server.Server(client_manager=mgr)
112112
s.rooms('123')
113113
s.manager.get_rooms.assert_called_once_with('123', '/')
114114

@@ -153,7 +153,7 @@ def test_transport(self, eio):
153153

154154
def test_handle_connect(self, eio):
155155
mgr = mock.MagicMock()
156-
s = server.Server(client_manager_class=mgr)
156+
s = server.Server(client_manager=mgr)
157157
handler = mock.MagicMock()
158158
s.on('connect', handler)
159159
s._handle_eio_connect('123', 'environ')
@@ -163,7 +163,7 @@ def test_handle_connect(self, eio):
163163

164164
def test_handle_connect_namespace(self, eio):
165165
mgr = mock.MagicMock()
166-
s = server.Server(client_manager_class=mgr)
166+
s = server.Server(client_manager=mgr)
167167
handler = mock.MagicMock()
168168
s.on('connect', handler, namespace='/foo')
169169
s._handle_eio_connect('123', 'environ')
@@ -175,7 +175,7 @@ def test_handle_connect_namespace(self, eio):
175175

176176
def test_handle_connect_rejected(self, eio):
177177
mgr = mock.MagicMock()
178-
s = server.Server(client_manager_class=mgr)
178+
s = server.Server(client_manager=mgr)
179179
handler = mock.MagicMock(return_value=False)
180180
s.on('connect', handler)
181181
s._handle_eio_connect('123', 'environ')
@@ -186,7 +186,7 @@ def test_handle_connect_rejected(self, eio):
186186

187187
def test_handle_connect_namespace_rejected(self, eio):
188188
mgr = mock.MagicMock()
189-
s = server.Server(client_manager_class=mgr)
189+
s = server.Server(client_manager=mgr)
190190
handler = mock.MagicMock(return_value=False)
191191
s.on('connect', handler, namespace='/foo')
192192
s._handle_eio_connect('123', 'environ')
@@ -197,7 +197,7 @@ def test_handle_connect_namespace_rejected(self, eio):
197197

198198
def test_handle_disconnect(self, eio):
199199
mgr = mock.MagicMock()
200-
s = server.Server(client_manager_class=mgr)
200+
s = server.Server(client_manager=mgr)
201201
handler = mock.MagicMock()
202202
s.on('disconnect', handler)
203203
s._handle_eio_connect('123', 'environ')
@@ -208,7 +208,7 @@ def test_handle_disconnect(self, eio):
208208

209209
def test_handle_disconnect_namespace(self, eio):
210210
mgr = mock.MagicMock()
211-
s = server.Server(client_manager_class=mgr)
211+
s = server.Server(client_manager=mgr)
212212
s.manager.get_namespaces = mock.MagicMock(return_value=['/', '/foo'])
213213
handler = mock.MagicMock()
214214
s.on('disconnect', handler)
@@ -223,7 +223,7 @@ def test_handle_disconnect_namespace(self, eio):
223223

224224
def test_handle_disconnect_only_namespace(self, eio):
225225
mgr = mock.MagicMock()
226-
s = server.Server(client_manager_class=mgr)
226+
s = server.Server(client_manager=mgr)
227227
s.manager.get_namespaces = mock.MagicMock(return_value=['/', '/foo'])
228228
handler = mock.MagicMock()
229229
s.on('disconnect', handler)
@@ -238,7 +238,7 @@ def test_handle_disconnect_only_namespace(self, eio):
238238

239239
def test_handle_disconnect_unknown_client(self, eio):
240240
mgr = mock.MagicMock()
241-
s = server.Server(client_manager_class=mgr)
241+
s = server.Server(client_manager=mgr)
242242
s._handle_eio_disconnect('123')
243243

244244
def test_handle_event(self, eio):
@@ -287,7 +287,7 @@ def test_handle_event_with_ack(self, eio):
287287

288288
def test_handle_event_with_ack_tuple(self, eio):
289289
mgr = mock.MagicMock()
290-
s = server.Server(client_manager_class=mgr)
290+
s = server.Server(client_manager=mgr)
291291
handler = mock.MagicMock(return_value=(1, '2', True))
292292
s.on('my message', handler)
293293
s._handle_eio_message('123', '21000["my message","a","b","c"]')
@@ -297,7 +297,7 @@ def test_handle_event_with_ack_tuple(self, eio):
297297

298298
def test_handle_event_with_ack_list(self, eio):
299299
mgr = mock.MagicMock()
300-
s = server.Server(client_manager_class=mgr)
300+
s = server.Server(client_manager=mgr)
301301
handler = mock.MagicMock(return_value=[1, '2', True])
302302
s.on('my message', handler)
303303
s._handle_eio_message('123', '21000["my message","a","b","c"]')
@@ -307,7 +307,7 @@ def test_handle_event_with_ack_list(self, eio):
307307

308308
def test_handle_event_with_ack_binary(self, eio):
309309
mgr = mock.MagicMock()
310-
s = server.Server(client_manager_class=mgr, binary=True)
310+
s = server.Server(client_manager=mgr, binary=True)
311311
handler = mock.MagicMock(return_value=b'foo')
312312
s.on('my message', handler)
313313
s._handle_eio_message('123', '21000["my message","foo"]')

0 commit comments

Comments
 (0)