乙個簡單的go的Socket伺服器工作池

2021-10-10 09:20:06 字數 1406 閱讀 6469

乙個簡單的go的socket伺服器工作池

處理收包和發包是工作池

server.go

package main

import (

"fmt"

"net"

"strconv"

"time"

"sync"

)type task struct

type result struct

var tasks = make(chan task, 10)

var results = make(chan result, 10)

type session struct

//處理接收的客戶端包,並返回返回包

func process(data byte) byte

//接收傳送包工作池

func worker(wg *sync.waitgroup)

results <- result

task.conn.lock.unlock()

case result := <- results://要傳送的包

fmt.printf("task id %s \n", string(result.data))

result.conn.lock.lock()//加鎖為了保證同乙個客戶端包是順序處理的

result.conn.conn.write(result.data)

result.conn.lock.unlock()}}

}//建立工作池

func createworkerpool(numofworkers int)

wg.wait()

close(results)

}//將任務放到工作池

func allocate(data byte, conn *session)

tasks <- task

time.sleep(1*time.second)

}//啟動工作池

func startpool()

//啟動監聽

func startlisten(port int)

for}

defer listener.close()

}/**

* 接收資料報

*/func recvdatan(conn net.conn, len int) (byte, bool)

nrecv, err := conn.read(buff[ntotalrecv:])

if err != nil

ntotalrecv += nrecv

}return buff, true

}//收包協程

func handleconn(conn *session)

}}func main()

乙個簡單的多執行緒socket

碼了2個小時多,終於弄完了。用的編輯器是qt creator 突然發現在qt creator上,也支援這些底層的c語言。在linux上除錯無誤。寫這個,也算是自己讀書的記錄吧!include include include include include include include includ...

乙個簡單的Socket通訊例子

睡眠一段時間再傳送訊息 sleep start private static void sleep catch interruptedexception e public class server catch ioexception e public void start private void ...

簡單的搭建乙個socket通訊

傳輸控制協議 tcp 是 tcp ip 協議棧中的傳輸層協議,它通過序列確認以及包重發機制,提供可靠bai的資料流傳送和到應用程式的虛擬連線服務。與 ip 協議相結合,tcp 組成了網際網路協議的核心。1 首先需要通訊雙方建立連線 2 然後彼此可以進行資料傳輸 3 資料傳輸結束後就關閉連線 1 基於...