原创 【Socket編程】Python實現簡易Web服務器

利用Python,我們可以搭建一個簡單的Web服務器,這裏我參考了: https://ruslanspivak.com/lsbaws-part1/ https://ruslanspivak.com/lsbaws-part2/ https:

原创 【Lua】Lua與C交互

上一篇文章簡單介紹了在Lua中如何調用C,其中的原理還是需要稍微深究一下。 文章參考自:Lua和C交互的簡易教程(HansChen的博客) C/C++與Lua交互的基礎源於虛擬棧。在Lua中,Lua堆棧就是一個struct,堆棧索引的方

原创 【TCP】TCP擁塞控制小記

相比UDP,TCP有擁塞控制。《計算機網絡》這本書以Tahoe與Reno爲例介紹了TCP的擁塞控制。 1、慢啓動和擁塞避免是必須的。這兩點不同之處在於擁塞窗口 cwnd 增速不同。慢啓動以指數增長,擁塞避免則以線性增長。 2、擁塞丟包的

原创 【Socket編程】Python用udp實現簡易ping

用Python實現一個簡易的ping程序,客戶端發送一個簡易的ping報文,接收到該信息的服務器返回對應的pong報文,然後客戶端計算RTT。由於UDP不是可靠協議,需要爲該程序設置超時機制,超時1秒後將假設報文沒有收到,並打印出超時提示

原创 【Skynet】socket與多服務

回顧之前服務器端的TCP連接: socket.listen(address, port) 監聽一個端口,返回一個 id ,供 start 使用。socket.start(id , accept) accept 是一個函數。每當一個監聽的

原创 【Lua】Lua調用C動態庫

lua 好歸好,但有很多對效率要求較高的服務,還得讓C來完成。本篇學習下Lua如何調用C。 最重要的部分: 定義一個 luaopen_* 函數,並調用 luaL_openlib 函數 int luaopen_mylib(lua_Sta

原创 【Lua】面向對象

Lua使用table來面向對象。 一個簡單的 Account 類: Account = {balance = 0} function Account.sub(self, v) self

原创 【Lua】元表初學

metatable,Lua中的元表,是Lua中重要的內容。 參考自:Lua中的元表與元方法(果凍想) 在Lua代碼中,只能設置table的元表。若要設置其它類型的值的元表,則必須通過C代碼來完成。還存在一個特例,對於字符串,標準的字符串

原创 【Socket編程】篇七之Python實現Socket

一年前使用過C來實現Socket,如今見識了腳本的便利之後,我來嘗試用Python再次實現一遍。 UDP: 客戶端: import socket serverName = "127.0.0.1" serverPort = 12000 c

原创 【Lua】“詭異”的return

類似其他語言,Lua也有return關鍵字,但需要注意其用法。因爲它只能用在block結束的地方, 不能用在block的一箇中間部分。想要使用 return 提前返回的童鞋注意了! 例子: function fun() i = 1

原创 【Socket編程】非阻塞connect

閱讀Skynet源碼的過程中,發現一種非阻塞connect方式。以前不知道,這次好好學習一下。 文章參考自:非阻塞connect編寫方法介紹(董的博客) TCP連接的建立涉及到一個三次握手的過程,鑑於RTT波動範圍很大,從局域網的幾個毫

原创 【Lua】初探協程

類似於線程,協程擁有自己獨立的棧、局部變量和指令指針。多個協程共享全局變量和其它大部分東西。線程與協程的主要區別在於,一個具有多個線程的程序可以同時運行幾個線程,而協程卻需要彼此協作的運行。就是說,一個具有多個協程的程序在任意時刻只能運行

原创 【Skynet】文件傳輸升級版

上一個socket文件傳輸過於簡單,師傅讓我進一步改進,定義包結構,讓文件的傳輸過程更加自由。該實現可以參考./examples/client.lua ,這裏面有數據的打包與解包。 這裏我設計了一個簡易的報文結構。 Length:即T

原创 【Skynet】Socket源碼剖析二

socket_server 層使用簡單封裝後的 epoll ,向上提供一些列 socket_server_*** 的API。skynet_socket封裝:爲了進一步適用於Skynet框架,又進行一步對socket_server進行了封裝

原创 【Skynet】使用skynet在服務器與客戶端間傳輸文件

這是一個簡單的文件傳輸例子,使用了skynet封裝的socket接口。熟悉一個框架最好的方法就是用它。 skynet有一個“服務(service)”的概念,每個服務類似與一個模塊,完成特定的任務,啓動一個服務可以使用 newservice