diff --git a/lualib/mongo.lua b/lualib/mongo.lua index b1e87ca7..458e1a6c 100644 --- a/lualib/mongo.lua +++ b/lualib/mongo.lua @@ -129,6 +129,7 @@ function mongo.client( conf ) response = dispatch_reply, auth = mongo_auth(obj), backup = backup, + nodelay = true, } setmetatable(obj, client_meta) obj.__sock:connect(true) -- try connect only once diff --git a/lualib/redis.lua b/lualib/redis.lua index cd9f43f4..87069e28 100644 --- a/lualib/redis.lua +++ b/lualib/redis.lua @@ -84,6 +84,7 @@ function redis.connect(db_conf) host = db_conf.host, port = db_conf.port or 6379, auth = redis_login(db_conf.auth, db_conf.db), + nodelay = true, } -- try connect first only once channel:connect(true) @@ -199,6 +200,7 @@ function redis.watch(db_conf) host = db_conf.host, port = db_conf.port or 6379, auth = watch_login(obj, db_conf.auth), + nodelay = true, } obj.__sock = channel diff --git a/lualib/socketchannel.lua b/lualib/socketchannel.lua index 1086cd79..e8207489 100644 --- a/lualib/socketchannel.lua +++ b/lualib/socketchannel.lua @@ -1,5 +1,6 @@ local skynet = require "skynet" local socket = require "socket" +local socketdriver = require "socketdriver" -- channel support auto reconnect , and capture socket error in request/response transaction -- { host = "", port = , auth = function(so) , response = function(so) session, data } @@ -37,6 +38,7 @@ function socket_channel.channel(desc) __sock = false, __closed = false, __authcoroutine = false, + __nodelay = desc.nodelay, } return setmetatable(c, channel_meta) @@ -186,6 +188,9 @@ local function connect_once(self) return false end end + if self.__nodelay then + socketdriver.nodelay(fd) + end self.__sock = setmetatable( {fd} , channel_socket_meta ) skynet.fork(dispatch_function(self), self)