Я новичок в питоне.Ниже приведен мой код.Я получаю эту ошибку при создании экземпляра своего класса.
ошибка обратного вызова>: on_open () принимает ровно 2 аргумента (1 дано)
Тот же код работает нормально, если я делаю все это вне класса, прямо в главном файле.Я думаю, что это как-то связано с «я» (атрибут?).Но подобный код на стороне сервера работает нормально.Я использую пакет web-socket-client !и следуя примеру Долгоживущее соединение , показанное там.
Это библиотека !Я использую для серверной стороны, который имеет очень похожий интерфейс с клиентской библиотекой.
Код серверной стороны
from websocket_server import WebsocketServer
def client_connected(client, server):
print "connected:"
print client
def client_disconnected(client, server):
print "Disconnected:"
print client
def message_received(client, server, message):
server.send_message(client, message)
print "message received: ", message
print client
server = WebsocketServer(13254, host='127.0.0.1')
server.set_fn_new_client(client_connected)
server.set_fn_client_left(client_disconnected)
server.set_fn_message_received(message_received)
server.run_forever()
Код клиентской стороны, которыйработает.
import websocket
from multiprocessing import Lock
import copy
import json
import time
import thread
txMsg = "hello world"
def on_message(ws, message):
print message
def on_error(ws, error):
print error
def on_close(ws):
print "### closed ###"
def on_open(ws):
def run():
for i in range(1):
time.sleep(1)
print txMsg
ws.send(txMsg)
time.sleep(1)
ws.close()
print "thread terminating..."
thread.start_new_thread(run, ())
if __name__ == "__main__":
websocket.enableTrace(True)
ws = websocket.WebSocketApp("ws://127.0.0.1:13254",
on_message = on_message,
on_error = on_error,
on_close = on_close,
on_open = on_open)
ws.run_forever()
код на стороне клиента, выдающий ошибку
import websocket
class Singleton(type):
_instances = {}
def __call__(cls, *args, **kwargs):
if cls not in cls._instances:
cls._instances[cls] = super(Singleton, cls).__call__(*args, **kwargs)
return cls._instances[cls]
class Client:
__metaclass__ = Singleton
serverAddress = None
serverPort = None
socket = None
def __init__(self, serverAddress, serverPort):
self.serverAddress= serverAddress
self.serverPort = serverPort
websocket.enableTrace(True)
self.socket = websocket.WebSocketApp("ws://"+ serverAddress +":"+str(serverPort),
on_message = self.on_message,
on_error = self.on_error,
on_close = self.on_close,
on_open = self.on_open)
# Callbacks------------------------------------------------------------------
def on_open(self, ws):
print "***Connection Opened***"
self.close()
def on_close(self, ws):
print "***Connection Closed***"
def on_message(self, ws, message):
print "Message: ", message
self.socket.close()
def on_error(self, ws, error):
print "Error: ", error
# API------------------------------------------------------------------
def close(self):
self.socket.close()
client = Client('127.0.0.1', 13254)
client.socket.run_forever()