When creating a new Lua VM to load shared tables, use the same hash seed from the parent VM instead of generating a new random seed. Different VMs have different hash seeds, causing identical strings to have different hash values. When looking up string keys in a shared table from another VM, the hash-based bucket lookup fails because the search key's hash doesn't match the stored key's hash. Solution: Pass G(L)->seed to lua_newstate() instead of using luaL_newstate() which generates a new random seed each time.
Skynet is a multi-user Lua framework supporting the actor model, often used in games.
It is heavily used in the Chinese game industry, but is also now spreading to other industries, and to English-centric developers. To visit related sites, visit the Chinese pages using something like Google or Deepl translate.
The community is friendly and almost all contributors can speak English, so English speakers are welcome to ask questions in Discussion, or submit issues in English.
Build
For Linux, install autoconf first for jemalloc:
git clone https://github.com/cloudwu/skynet.git
cd skynet
make 'PLATFORM' # PLATFORM can be linux, macosx, freebsd now
Or:
export PLAT=linux
make
For FreeBSD , use gmake instead of make.
Test
Run these in different consoles:
./skynet examples/config # Launch first skynet node (Gate server) and a skynet-master (see config for standalone option)
./3rd/lua/lua examples/client.lua # Launch a client, and try to input hello.
About Lua version
Skynet now uses a modified version of lua 5.4.7 ( https://github.com/ejoy/lua/tree/skynet54 ) for multiple lua states.
Official Lua versions can also be used as long as the Makefile is edited.
How To Use
- Read Wiki for documents https://github.com/cloudwu/skynet/wiki (Written in both English and Chinese)
- The FAQ in wiki https://github.com/cloudwu/skynet/wiki/FAQ (In Chinese, but you can visit them using something like Google or Deepl translate.)
