From 7a87fc1e49ddd6381e843b1852fbf545ae1e1a49 Mon Sep 17 00:00:00 2001 From: Mann Patel <130435633+MannPatel0@users.noreply.github.com> Date: Tue, 25 Mar 2025 14:48:28 -0600 Subject: [PATCH] Initial Server and Client for recommond engine --- recommondation-engine/client.js | 48 ++++++++++++++++++++++++++++ recommondation-engine/server1.py | 54 +++++++++++++++++++++----------- 2 files changed, 84 insertions(+), 18 deletions(-) create mode 100644 recommondation-engine/client.js diff --git a/recommondation-engine/client.js b/recommondation-engine/client.js new file mode 100644 index 0000000..67258ae --- /dev/null +++ b/recommondation-engine/client.js @@ -0,0 +1,48 @@ +const net = require("net"); + +// Function to get recommendations from the Python server +function getRecommendations(userId) { + const client = new net.Socket(); + + // Connect to the server on localhost at port 9999 + client.connect(9999, "localhost", function () { + console.log(`Connected to server, sending user_id: ${userId}`); + + // Send the user_id in JSON format + const message = JSON.stringify({ user_id: userId }); + client.write(message); + }); + + // Listen for data from the server + client.on("data", function (data) { + const recommendations = JSON.parse(data.toString()); + console.log( + `Recommendations for User ${userId}:`, + recommendations.recommendations, + ); + + // Close the connection after receiving the response + client.destroy(); + }); + + // Handle connection errors + client.on("error", function (error) { + console.error("Connection error:", error.message); + }); + + // Handle connection close + client.on("close", function () { + console.log(`Connection to server closed for User ${userId}`); + }); +} + +// Function to simulate multiple users requesting recommendations +function simulateClients() { + for (let i = 1; i <= 5; i++) { + setTimeout(() => { + getRecommendations(i); // Simulate clients with IDs 1 to 5 + }, i * 1000); // Stagger requests every second + } +} + +simulateClients(); diff --git a/recommondation-engine/server1.py b/recommondation-engine/server1.py index 94f1fd4..bd7cdad 100644 --- a/recommondation-engine/server1.py +++ b/recommondation-engine/server1.py @@ -1,24 +1,42 @@ -import asyncio -import websockets +import socket +import threading +import json -async def handle_client(websocket, path): - try: - # Receive user ID - user_id = await websocket.recv() - print(f"Received user ID: {user_id}") +# Sample recommendations function +def get_recommendations(user_id): + # This is a mock function. Replace it with your actual recommendation logic. + return {"recommendations": [f"Product {user_id} - Item 1", f"Product {user_id} - Item 2", f"Product {user_id} - Item 3"]} - # Optional: You can add more logic here if needed +# Handle client connection +def handle_client(client_socket, client_address): + print(f"New connection from {client_address}") - except websockets.exceptions.ConnectionClosed: - print("Client disconnected") - except Exception as e: - print(f"Error processing request: {str(e)}") + # Receive the client request (user_id) + request = client_socket.recv(1024).decode("utf-8") + if request: + data = json.loads(request) + user_id = data.get("user_id") -async def start_server(): - server = await websockets.serve(handle_client, "localhost", 5555) - print("WebSocket server started") - await server.wait_closed() + # Get recommendations for the user + recommendations = get_recommendations(user_id) + + # Send the response back to the client + client_socket.send(json.dumps(recommendations).encode("utf-8")) + + # Close the connection after sending the response + client_socket.close() + +# Start the server to handle multiple clients +def start_server(): + server = socket.socket(socket.AF_INET, socket.SOCK_STREAM) + server.bind(("0.0.0.0", 9999)) # Bind to all interfaces on port 9999 + server.listen(5) + print("Server listening on port 9999...") + + while True: + client_socket, client_address = server.accept() + client_thread = threading.Thread(target=handle_client, args=(client_socket, client_address)) + client_thread.start() # Run the server -if __name__ == "__main__": - asyncio.run(start_server()) +start_server()