程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> 關於C語言 >> 頁游手游服務器(一)

頁游手游服務器(一)

編輯:關於C語言

把工作幾年服務器相關的部分內容,通過服務器解決方案,做一次總結。
整個實現的主體是lua腳本,lua實現主要缺少的兩大塊:
1網絡部分
2數據庫部分
這兩部分必須通過c/c++做擴展
先來做net,主要是服務器net,和客戶端net。
服務器發起連接的情況主要是用於和平台驗證,上報之類的,還有服務間通信,接口如下:
_connect(ip, port, onconnect, onclose, timeout)
參數:
ip,地址
port 端口
onconnect 連接上的回調
onclose 關閉的回調
timeout 連接的客戶端socket超時時間,超時會回調close
返回net對象

服務器net負責監聽,收集客戶端來的消息,接口如下:
_listen(ip, port, onconnect, onclose, timeout)
參數:
ip,地址
port 端口
onconnect 連接上的回調
onclose 關閉的回調
timeout 連接的客戶端socket超時時間,超時會回調close
返回net對象

net對象方法:
net:receive(sep1,sep2,sep3,maxlen, onrec),設置接收條件
net:send(data)
net:close(),主動關閉連接

假定客戶端和服務器的通信協議是:4字節表示長度len,後面len個字節表示真正的消息
服務器net典型使用方法
locla function onbody(net, data)
--data 是消息包,根據需要處理
net:receive(4, onhead)
end

local funciton onhead(net, data)
local len=string.from32(data)
--len是消息包的字節長度
net:receive(len, onbody)
end

local function onconnect(net, snet)
net:receive(4, onhead)
end

local function onclose(net, msg)
print("net closed", msg)
end

local snet=_listen("0.0.0.0", 80, onconnect, onclose, 60)

假定服務器給客戶端發的消息包,協議如上
客戶端典型使用如下:
locla function onbody(net, data)
--data 是消息包,根據需要處理
net:receive(4, onhead)
end
local function onconnect(net, snet)
net:receive(4, onhead)
end

local function onclose(net, msg)
print("net closed", msg)
end
local cnet=_connect("X.X.X.X", 8081, onconnect, onclose, 60)
net:send(#data)
net:send(data)
網絡部分使用了libiop庫,因為它的一些api不滿足我的需求,稍作了修改,源碼等哪天有空(等系列文章寫完了再整理)整理下,測試通過了再上傳。

net和sql都是給lua做拓展,精彩部分在lua,稍後

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved