cluster.lua 1.4 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556
  1. local skynet = require "skynet"
  2. local clusterd
  3. local cluster = {}
  4. function cluster.call(node, address, ...)
  5. -- skynet.pack(...) will free by cluster.core.packrequest
  6. return skynet.call(clusterd, "lua", "req", node, address, skynet.pack(...))
  7. end
  8. function cluster.send(node, address, ...)
  9. -- push is the same with req, but no response
  10. skynet.send(clusterd, "lua", "push", node, address, skynet.pack(...))
  11. end
  12. function cluster.open(port)
  13. if type(port) == "string" then
  14. skynet.call(clusterd, "lua", "listen", port)
  15. else
  16. skynet.call(clusterd, "lua", "listen", "0.0.0.0", port)
  17. end
  18. end
  19. function cluster.reload(config)
  20. skynet.call(clusterd, "lua", "reload", config)
  21. end
  22. function cluster.proxy(node, name)
  23. return skynet.call(clusterd, "lua", "proxy", node, name)
  24. end
  25. function cluster.snax(node, name, address)
  26. local snax = require "skynet.snax"
  27. if not address then
  28. address = cluster.call(node, ".service", "QUERY", "snaxd" , name)
  29. end
  30. local handle = skynet.call(clusterd, "lua", "proxy", node, address)
  31. return snax.bind(handle, name)
  32. end
  33. function cluster.register(name, addr)
  34. assert(type(name) == "string")
  35. assert(addr == nil or type(addr) == "number")
  36. return skynet.call(clusterd, "lua", "register", name, addr)
  37. end
  38. function cluster.query(node, name)
  39. return skynet.call(clusterd, "lua", "req", node, 0, skynet.pack(name))
  40. end
  41. skynet.init(function()
  42. clusterd = skynet.uniqueservice("clusterd")
  43. end)
  44. return cluster