正在显示
1 个修改的文件
包含
19 行增加
和
1 行删除
| @@ -430,6 +430,8 @@ class CdnNode: | @@ -430,6 +430,8 @@ class CdnNode: | ||
| 430 | 430 | ||
| 431 | self.public_ip = cherrypy.request.remote.ip | 431 | self.public_ip = cherrypy.request.remote.ip |
| 432 | self.heartbeat = time.time() | 432 | self.heartbeat = time.time() |
| 433 | + | ||
| 434 | + self.clients = 0 | ||
| 433 | 435 | ||
| 434 | def dead(self): | 436 | def dead(self): |
| 435 | dead_time_seconds = 10 | 437 | dead_time_seconds = 10 |
| @@ -446,6 +448,7 @@ class CdnNode: | @@ -446,6 +448,7 @@ class CdnNode: | ||
| 446 | data["public_ip"] = self.public_ip | 448 | data["public_ip"] = self.public_ip |
| 447 | data["heartbeat"] = self.heartbeat | 449 | data["heartbeat"] = self.heartbeat |
| 448 | data["heartbeat_h"] = time.strftime("%Y-%m-%d %H:%M:%S",time.localtime(self.heartbeat)) | 450 | data["heartbeat_h"] = time.strftime("%Y-%m-%d %H:%M:%S",time.localtime(self.heartbeat)) |
| 451 | + data["clients"] = self.clients | ||
| 449 | return data | 452 | return data |
| 450 | 453 | ||
| 451 | ''' | 454 | ''' |
| @@ -494,6 +497,16 @@ class RESTNodes(object): | @@ -494,6 +497,16 @@ class RESTNodes(object): | ||
| 494 | for node in peers: | 497 | for node in peers: |
| 495 | data.append(node.json_dump()) | 498 | data.append(node.json_dump()) |
| 496 | return data | 499 | return data |
| 500 | + | ||
| 501 | + def __select_peer(self, peers, ip): | ||
| 502 | + target = None | ||
| 503 | + for peer in peers: | ||
| 504 | + if target is None or target.clients > peer.clients: | ||
| 505 | + target = peer | ||
| 506 | + if target is None: | ||
| 507 | + return None | ||
| 508 | + target.clients += 1 | ||
| 509 | + return target.ip | ||
| 497 | 510 | ||
| 498 | def GET(self, type=None, format=None, origin=None, vhost=None, port=None, stream=None): | 511 | def GET(self, type=None, format=None, origin=None, vhost=None, port=None, stream=None): |
| 499 | enable_crossdomain() | 512 | enable_crossdomain() |
| @@ -506,7 +519,7 @@ class RESTNodes(object): | @@ -506,7 +519,7 @@ class RESTNodes(object): | ||
| 506 | server = origin | 519 | server = origin |
| 507 | peers = self.__get_peers_for_play(ip) | 520 | peers = self.__get_peers_for_play(ip) |
| 508 | if len(peers) > 0: | 521 | if len(peers) > 0: |
| 509 | - server = peers[0].ip | 522 | + server = self.__select_peer(peers, ip) |
| 510 | if type == "hls": | 523 | if type == "hls": |
| 511 | hls_url = "http://%s:%s/%s.m3u8"%(server, port, stream) | 524 | hls_url = "http://%s:%s/%s.m3u8"%(server, port, stream) |
| 512 | hls_url = hls_url.replace(".m3u8.m3u8", ".m3u8") | 525 | hls_url = hls_url.replace(".m3u8.m3u8", ".m3u8") |
| @@ -548,6 +561,11 @@ class RESTNodes(object): | @@ -548,6 +561,11 @@ class RESTNodes(object): | ||
| 548 | 561 | ||
| 549 | node.heartbeat = time.time() | 562 | node.heartbeat = time.time() |
| 550 | node.srs_status = str(json_req["srs_status"]) | 563 | node.srs_status = str(json_req["srs_status"]) |
| 564 | + node.ip = str(json_req["ip"]) | ||
| 565 | + node.public_ip = cherrypy.request.remote.ip | ||
| 566 | + # reset if restart. | ||
| 567 | + if node.srs_status != "running": | ||
| 568 | + node.clients = 0 | ||
| 551 | 569 | ||
| 552 | self.__refresh_nodes() | 570 | self.__refresh_nodes() |
| 553 | peers = self.__get_peers(node) | 571 | peers = self.__get_peers(node) |
-
请 注册 或 登录 后发表评论