socket 程式設計例項 基於執行緒池實現服務端併發

2022-06-13 20:00:13 字數 1927 閱讀 9602

1.socket程式設計

軟體測試並jmeter為的是實現客戶端併發,jmeter 的原理是使用執行緒池,

而軟體開發的目的是為實現服務端的併發支援多使用者同時併發工作

2. 基於多執行緒實現套接字服務端實現併發

客戶端: 

'''

客戶端只要單使用者迴圈通訊

'''import socket

client = socket.socket()

client.connect(('127.0.0.1',8090))

while true:

client.send('33'.encode('utf-8'))

data = client.recv(1024)

print(data)

'''

服務端要實現多使用者連線 並實現迴圈通訊

'''方式1: 執行緒池

import socket

from concurrent.futures import threadpoolexecutor

server = socket.socket()

server.bind(

('127.0.0.1', 9000)

)server.listen(5)

# 1.封裝成乙個函式 多使用者實現迴圈通訊 乙個使用者建立乙個通道

def run(conn):

while true:

try:

data = conn.recv(1024)

if len(data) == 0:

break

print(data.decode('utf-8'))

conn.send('111'.encode('utf-8'))

except exception as e:

break

conn.close()

if __name__ == '__main__':

print('server is run....')

pool = threadpoolexecutor(50)

while true:

conn, addr = server.accept()

print(addr)

pool.submit(run, conn)

方式2: 直接迴圈不設定併發數
def communicate(conn):   #  乙個使用者乙個通道

while true:

try:

data = conn.recv(1024)

if len(data) == 0:

break

conn.send(data.upper())

except exception as e:

print(e)

break

conn.close()

def server():

server = socket.socket()

server.bind(('127.0.0.1',8989))

server.listen(5)

while true:

conn,addr = server.accept()

t = thread(target= communicate,args=(conn,) ) # 因為python中的() 既可以表示數學公式中的小括號,又可以表示元組

t.start() # 執行communicate函式 server函式為乙個執行緒,start()會令啟乙個執行緒

if __name__ == '__main__':

s = thread(target = server)

s.start()

Java併發程式設計 執行緒池 例項

public class test executor.shutdown while true try catch interruptedexception e public void testrun threadpoolexecutor executor,final int a catch inte...

C 中Socket多執行緒程式設計例項

要通過網際網路進行通訊,你至少需要一對套接字,其中乙個執行於客戶機端,我們稱之為clientsocket,另乙個執行於伺服器端,我們稱之為serversocket。根據連線啟動的方式以及本地套接字要連線的目標,套接字之間的連線過程可以分為三個步驟 伺服器監聽,客戶端請求,連線確認。所謂伺服器監聽,是...

Socket程式設計例項

struct sockaddr sockaddr定義的標頭檔案 sys socket.h struct sockaddr in sockaddr in解決了sockaddr 的缺陷,實際上相當於把sockaddr 中的sa data分成了3個部分 sockaddr in 定義的標頭檔案 netine...