web應用通訊通常都喜歡用http介面,但不排除直接socket通訊的情況。
socket除了server端構建麻煩些(需要考慮很多實際情況),對於呼叫者來說構建個client端其實不比http麻煩多少。
#!/usr/bin/env python
"""# -*- coding:utf-8 -*-
# auther: linvo
import socket
class client(object):
"""呼叫遠端socket介面try:
obj = client(host, port)
ret = obj.send(data)
except exception, e:
ret = e
def __init__(self, host, port, timeout = 5):
"""鏈結遠端介面服務
"""self.sock = none
try:
socket.setdefaulttimeout(timeout)
self.sock = socket.socket(socket.af_inet, socket.sock_stream)
self.sock.connect((host, port))
except socket.error, e:
raise exception('socket error:' + str(e))
except exception, e:
raise exception('connect error:' + str(e))
def send(self, data):
"""socket通訊
傳送和接收
data: 傳送的資料
ret: 接收的資料
"""ret = none
# 鏈結成功,開始傳輸
if self.sock:
data = str(data)
try:
result = self.sock.sendall(data)
except exception, e:
result = str(e)
if result is not none:
raise exception('send error:' + str(result))
else:
# 接收
ret = ''
try:
while true:
buffer = self.sock.recv(2048)
if buffer:
ret += buffer
else:
break
except exception, e:
raise exception('recv error:' + str(e))
return ret
順便給個簡易的server端,以便測試:
import socket
sock = socket.socket(socket.af_inet, socket.sock_stream)
sock.bind(('localhost', 9801))
sock.listen(5)
while true:
connection, address = sock.accept()
try:
connection.settimeout(5)
buf = connection.recv(2048)
connection.send(buf)
except socket.timeout:
print 'time out'
connection.close()
python實現rpc遠端呼叫
遠端呼叫就是將物件名 函式名 引數等傳遞給遠端伺服器,伺服器將處理結果返回給客戶端。遠端呼叫使得呼叫遠端伺服器的物件 方法的方式就和呼叫本地物件 方法的方式差不多,因為我們通過網路程式設計把這些都隱藏起來了。遠端呼叫是分布式系統的基礎。遠端呼叫一般分為兩種,遠端過程呼叫 rpc 和遠端方法呼叫 rm...
Python 實現遠端方法呼叫
在乙個訊息傳輸層如 sockets multiprocessing connections 或 zeromq 的基礎之上實現乙個簡單的遠端過程呼叫 rpc server.py import pickle from multiprocessing.connection import listener ...
python 實現呼叫遠端介面
在python中我們可以使用requests模組來實現呼叫遠端介面 一 安裝requests模組 pip install requests二 使用requests模組實現get方式呼叫遠端介面 使用get方式呼叫遠端介面主要使用了requests模組的get方法 requests.get get方法...