Namaste Reader,
我们正在研究使用套接字编程的客户端服务器通信机制。 PJSUA2呼叫状态(呼叫应答,呼叫保持,呼叫断开等)在客户端进行处理,具体取决于我们从服务器收到的自定义命令。
例如,如果服务器发送“ cmd_answer”,则客户端将执行代码语句“ call_prm.statusCode = 200”和“ call.answer(call_prm)”。
我创建了一个额外的线程来单独管理套接字通信。在该方法内部,我正在使用PJSUA2将线程注册为'endpoint.libRegisterThread(“ clientSocketCommunication”)'。
套接字通信的示例代码如下:
def clientSocketCommunication:
endpoint.libRegisterThread("clientSocketCommunication")
...
...
while True:
data = socket_client.recv(1024)
# Parse data into object
obj = json.loads(data.decode())
print(obj)
if obj['cmd'] == 'call_answer':
call_prm.statusCode = 200
call.answer(call_prm)
print("Call answered")
elif obj['cmd'] == 'call_end':
call_prm.statusCode = 200
call.hangup(call_prm)
print("Call ended")
break
因此,除了主要的PJSUA2应用程序之外,这个新创建的用于客户端服务器通信的线程现在可以并行运行。
采用这种逻辑,即使套接字服务器向套接字客户端发送消息后,程序仍会在以下语句中无限期停止。
data = socket_client.recv(1024)
端点是PJSUA2端点的对象,而socket_client是Python3的socket.socket()的对象。
请求协助以解决此问题。因为我是Python和PJSUA2的新手,所以请寻求支持。
谢谢!问候
迪彭