mirror of
https://github.com/ossrs/srs.git
synced 2025-02-13 11:51:57 +00:00
update api, select the lowest load of peer
This commit is contained in:
parent
87bdaa21c9
commit
b85e667991
1 changed files with 19 additions and 1 deletions
|
@ -431,6 +431,8 @@ class CdnNode:
|
||||||
self.public_ip = cherrypy.request.remote.ip
|
self.public_ip = cherrypy.request.remote.ip
|
||||||
self.heartbeat = time.time()
|
self.heartbeat = time.time()
|
||||||
|
|
||||||
|
self.clients = 0
|
||||||
|
|
||||||
def dead(self):
|
def dead(self):
|
||||||
dead_time_seconds = 10
|
dead_time_seconds = 10
|
||||||
if time.time() - self.heartbeat > dead_time_seconds:
|
if time.time() - self.heartbeat > dead_time_seconds:
|
||||||
|
@ -446,6 +448,7 @@ class CdnNode:
|
||||||
data["public_ip"] = self.public_ip
|
data["public_ip"] = self.public_ip
|
||||||
data["heartbeat"] = self.heartbeat
|
data["heartbeat"] = self.heartbeat
|
||||||
data["heartbeat_h"] = time.strftime("%Y-%m-%d %H:%M:%S",time.localtime(self.heartbeat))
|
data["heartbeat_h"] = time.strftime("%Y-%m-%d %H:%M:%S",time.localtime(self.heartbeat))
|
||||||
|
data["clients"] = self.clients
|
||||||
return data
|
return data
|
||||||
|
|
||||||
'''
|
'''
|
||||||
|
@ -495,6 +498,16 @@ class RESTNodes(object):
|
||||||
data.append(node.json_dump())
|
data.append(node.json_dump())
|
||||||
return data
|
return data
|
||||||
|
|
||||||
|
def __select_peer(self, peers, ip):
|
||||||
|
target = None
|
||||||
|
for peer in peers:
|
||||||
|
if target is None or target.clients > peer.clients:
|
||||||
|
target = peer
|
||||||
|
if target is None:
|
||||||
|
return None
|
||||||
|
target.clients += 1
|
||||||
|
return target.ip
|
||||||
|
|
||||||
def GET(self, type=None, format=None, origin=None, vhost=None, port=None, stream=None):
|
def GET(self, type=None, format=None, origin=None, vhost=None, port=None, stream=None):
|
||||||
enable_crossdomain()
|
enable_crossdomain()
|
||||||
|
|
||||||
|
@ -506,7 +519,7 @@ class RESTNodes(object):
|
||||||
server = origin
|
server = origin
|
||||||
peers = self.__get_peers_for_play(ip)
|
peers = self.__get_peers_for_play(ip)
|
||||||
if len(peers) > 0:
|
if len(peers) > 0:
|
||||||
server = peers[0].ip
|
server = self.__select_peer(peers, ip)
|
||||||
if type == "hls":
|
if type == "hls":
|
||||||
hls_url = "http://%s:%s/%s.m3u8"%(server, port, stream)
|
hls_url = "http://%s:%s/%s.m3u8"%(server, port, stream)
|
||||||
hls_url = hls_url.replace(".m3u8.m3u8", ".m3u8")
|
hls_url = hls_url.replace(".m3u8.m3u8", ".m3u8")
|
||||||
|
@ -548,6 +561,11 @@ class RESTNodes(object):
|
||||||
|
|
||||||
node.heartbeat = time.time()
|
node.heartbeat = time.time()
|
||||||
node.srs_status = str(json_req["srs_status"])
|
node.srs_status = str(json_req["srs_status"])
|
||||||
|
node.ip = str(json_req["ip"])
|
||||||
|
node.public_ip = cherrypy.request.remote.ip
|
||||||
|
# reset if restart.
|
||||||
|
if node.srs_status != "running":
|
||||||
|
node.clients = 0
|
||||||
|
|
||||||
self.__refresh_nodes()
|
self.__refresh_nodes()
|
||||||
peers = self.__get_peers(node)
|
peers = self.__get_peers(node)
|
||||||
|
|
Loading…
Reference in a new issue