Skip to content
GitLab
Explore
Sign in
Primary navigation
Search or go to…
Project
D
ds-project
Manage
Activity
Members
Labels
Plan
Issues
Issue boards
Milestones
Wiki
Requirements
Code
Merge requests
Repository
Branches
Commits
Tags
Repository graph
Compare revisions
Snippets
Locked files
Build
Pipelines
Jobs
Pipeline schedules
Test cases
Artifacts
Deploy
Package registry
Container Registry
Model registry
Operate
Environments
Terraform modules
Monitor
Incidents
Analyze
Value stream analytics
Contributor analytics
CI/CD analytics
Repository analytics
Code review analytics
Issue analytics
Insights
Model experiments
Help
Help
Support
GitLab documentation
Compare GitLab plans
Community forum
Contribute to GitLab
Provide feedback
Keyboard shortcuts
?
Snippets
Groups
Projects
Show more breadcrumbs
Alexander Schulz
ds-project
Commits
2deb5d76
Commit
2deb5d76
authored
1 year ago
by
Zanger
Browse files
Options
Downloads
Patches
Plain Diff
Heartbeat Functions
parent
954d7820
No related branches found
No related tags found
1 merge request
!1
Heartbeat Functions
Changes
1
Hide whitespace changes
Inline
Side-by-side
Showing
1 changed file
server.py
+59
-3
59 additions, 3 deletions
server.py
with
59 additions
and
3 deletions
server.py
+
59
−
3
View file @
2deb5d76
...
@@ -2,18 +2,19 @@ import multiprocessing
...
@@ -2,18 +2,19 @@ import multiprocessing
import
socket
import
socket
import
threading
import
threading
import
json
import
json
import
time
client_broadcast_listener_port
=
49153
client_broadcast_listener_port
=
49153
server_broadcast_listener_port
=
49154
server_broadcast_listener_port
=
49154
server_heartbeat_tcp_listener_port
=
49155
client_receive_chat_tcp_port
=
50001
client_receive_chat_tcp_port
=
50001
client_forward_message_multicast_port
=
51000
client_forward_message_multicast_port
=
51000
multicast_group_ip
=
'
224.0.1.1
'
multicast_group_ip
=
'
224.0.1.1
'
class
Server
(
multiprocessing
.
Process
):
class
Server
(
multiprocessing
.
Process
):
#server_address = '127.0.0.1'
#server_address = '127.0.0.1'
host
=
socket
.
gethostname
()
host
=
socket
.
gethostname
()
...
@@ -39,13 +40,69 @@ class Server(multiprocessing.Process):
...
@@ -39,13 +40,69 @@ class Server(multiprocessing.Process):
server_listener_thread
=
threading
.
Thread
(
target
=
self
.
listen_for_servers
)
server_listener_thread
=
threading
.
Thread
(
target
=
self
.
listen_for_servers
)
server_listener_thread
.
start
()
server_listener_thread
.
start
()
heartbeat_send_thread
=
threading
.
Thread
(
target
=
self
.
send_heartbeat
)
heartbeat_send_thread
.
start
()
else
:
else
:
cache_update_listener_thread
=
threading
.
Thread
(
target
=
self
.
listen_for_cache_update
)
cache_update_listener_thread
=
threading
.
Thread
(
target
=
self
.
listen_for_cache_update
)
client_message_listener_thread
=
threading
.
Thread
(
target
=
self
.
listen_for_client_messages
)
client_message_listener_thread
=
threading
.
Thread
(
target
=
self
.
listen_for_client_messages
)
heartbeat_receive_thread
=
threading
.
Thread
(
target
=
self
.
listen_for_heartbeats
)
cache_update_listener_thread
.
start
()
cache_update_listener_thread
.
start
()
client_message_listener_thread
.
start
()
client_message_listener_thread
.
start
()
heartbeat_receive_thread
.
start
()
def
send_heartbeat
(
self
):
while
True
:
time
.
sleep
(
10
)
for
server_id
,
server_port
in
self
.
local_servers_cache
.
items
():
if
server_id
!=
self
.
server_id
:
acknowledgment_received
=
self
.
send_heartbeat_to_server
(
self
.
server_address
,
server_heartbeat_tcp_listener_port
)
#acknowledgment_received = "YES"
if
acknowledgment_received
:
print
(
f
"
Heartbeat acknowledgment received from
{
server_id
}
"
)
else
:
print
(
f
"
No acknowledgment received from
{
server_id
}
. Server may be down.
"
)
def
send_heartbeat_to_server
(
self
,
server_address
,
server_port
):
acknowledgment_received
=
False
try
:
with
socket
.
socket
(
socket
.
AF_INET
,
socket
.
SOCK_STREAM
)
as
s
:
s
.
settimeout
(
2
)
# Timeout for the connection
# Combine server address and port into a tuple
server_address_with_port
=
(
server_address
,
server_port
)
print
(
"
server_address_with_port
"
,
server_address_with_port
)
s
.
connect
(
server_address_with_port
)
s
.
sendall
(
b
'
HEARTBEAT
'
)
acknowledgment
=
s
.
recv
(
1024
)
if
acknowledgment
==
b
'
ACK
'
:
acknowledgment_received
=
True
except
socket
.
error
:
pass
# Error handling for connection errors or timeout
return
acknowledgment_received
def
listen_for_heartbeats
(
self
):
while
True
:
try
:
with
socket
.
socket
(
socket
.
AF_INET
,
socket
.
SOCK_STREAM
)
as
s
:
s
.
bind
((
self
.
server_address
,
server_heartbeat_tcp_listener_port
))
# Bind to any available port
actual_port
=
s
.
getsockname
()[
1
]
print
(
f
"
Heartbeat Listener Started on port
{
actual_port
}
"
)
s
.
listen
()
conn
,
addr
=
s
.
accept
()
with
conn
:
print
(
"
Hallo
"
)
data
=
conn
.
recv
(
1024
)
if
data
==
b
'
HEARTBEAT
'
:
# Hier Code zum Verarbeiten des Heartbeats
# (z.B., Aktualisieren des Zeitstempels für den letzten Heartbeat)
print
(
f
"
Heartbeat received from
{
addr
}
"
)
# Hier Code zum Senden des Acknowledgment
conn
.
sendall
(
b
'
ACK
'
)
except
socket
.
error
as
e
:
print
(
f
"
Error:
{
e
}
"
)
# find highest server ID in cache
# find highest server ID in cache
def
get_last_server_id
(
self
):
def
get_last_server_id
(
self
):
...
@@ -56,7 +113,6 @@ class Server(multiprocessing.Process):
...
@@ -56,7 +113,6 @@ class Server(multiprocessing.Process):
# ascii value before A
# ascii value before A
return
64
return
64
def
listen_for_servers
(
self
):
def
listen_for_servers
(
self
):
BROADCAST_PORT
=
49154
BROADCAST_PORT
=
49154
...
...
This diff is collapsed.
Click to expand it.
Preview
0%
Loading
Try again
or
attach a new file
.
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Save comment
Cancel
Please
register
or
sign in
to comment