يعرض هذا المشروع تدفق HTTP باستخدام Server-Sent Events (SSE) مع Spring Boot WebFlux. ويتكون من تطبيقين:
- خادم الآلة الحاسبة: خدمة ويب تفاعلية تقوم بالعمليات الحسابية وتبث النتائج باستخدام SSE
- عميل الآلة الحاسبة: تطبيق عميل يستهلك نقطة النهاية للبث
- جافا 17 أو أعلى
- مافن 3.6 أو أعلى
java/
├── calculator-server/ # Spring Boot server with SSE endpoint
│ ├── src/main/java/com/example/calculatorserver/
│ │ ├── CalculatorServerApplication.java
│ │ └── CalculatorController.java
│ └── pom.xml
├── calculator-client/ # Spring Boot client application
│ ├── src/main/java/com/example/calculatorclient/
│ │ └── CalculatorClientApplication.java
│ └── pom.xml
└── README.md
-
يقوم خادم الآلة الحاسبة بكشف نقطة النهاية
/calculateendpoint that:- Accepts query parameters:
a(number),b(number),op(operation) - Supported operations:
add,sub,mul,div - Returns Server-Sent Events with calculation progress and result
- Accepts query parameters:
-
The Calculator Client connects to the server and:
- Makes a request to calculate
7 * 5 - يستهلك استجابة التدفق
- يعرض كل حدث في وحدة التحكم
- Makes a request to calculate
افتح الطرفية وانتقل إلى مجلد الخادم:
cd calculator-server
mvn clean package
mvn spring-boot:runسيبدأ الخادم على http://localhost:8080
يجب أن ترى مخرجات مثل:
Started CalculatorServerApplication in X.XXX seconds
Netty started on port 8080 (http)
افتح طرفية جديدة وانتقل إلى مجلد العميل:
cd calculator-client
mvn clean package
mvn spring-boot:runسيتصل العميل بالخادم، وينفذ العملية الحسابية، ويعرض نتائج التدفق.
cd calculator-server
mvn clean package
java -jar target/calculator-server-0.0.1-SNAPSHOT.jarcd calculator-client
mvn clean package
java -jar target/calculator-client-0.0.1-SNAPSHOT.jarيمكنك أيضًا اختبار الخادم باستخدام متصفح الويب أو curl:
زر الرابط: http://localhost:8080/calculate?a=10&b=5&op=add
curl "http://localhost:8080/calculate?a=10&b=5&op=add" -H "Accept: text/event-stream"عند تشغيل العميل، يجب أن ترى تدفقًا مماثلًا للآتي:
event:info
data:Calculating: 7.0 mul 5.0
event:result
data:35.0
add- Addition (a + b)sub- Subtraction (a - b)mul- Multiplication (a * b)div- Division (a / b, returns NaN if b = 0)
Parameters:
a(required): First number (double)b(required): Second number (double)op(required): Operation (add,sub,mul,div)
Response:
- Content-Type:
text/event-stream - يعيد Server-Sent Events مع تقدم العملية والنتيجة
مثال على الطلب:
GET /calculate?a=7&b=5&op=mul HTTP/1.1
Host: localhost:8080
Accept: text/event-stream
مثال على الاستجابة:
event: info
data: Calculating: 7.0 mul 5.0
event: result
data: 35.0
-
المنفذ 8080 مستخدم بالفعل
- أوقف أي تطبيقات أخرى تستخدم المنفذ 8080
- أو غيّر منفذ الخادم في
calculator-server/src/main/resources/application.yml
-
Connection refused
- Make sure the server is running before starting the client
- Check that the server started successfully on port 8080
-
Parameter name issues
- This project includes Maven compiler configuration with
-parametersflag - If you encounter parameter binding issues, ensure the project is built with this configuration
- This project includes Maven compiler configuration with
- Press
Ctrl+Cin the terminal where each application is running - Or use
mvn spring-boot:stopإذا كنت تشغله كعملية في الخلفية
- Spring Boot 3.3.1 - إطار عمل التطبيق
- Spring WebFlux - إطار عمل الويب التفاعلي
- Project Reactor - مكتبة تدفقات تفاعلية
- Netty - خادم I/O غير محظور
- Maven - أداة البناء
- Java 17+ - لغة البرمجة
جرّب تعديل الكود لـ:
- إضافة المزيد من العمليات الحسابية
- تضمين معالجة الأخطاء للعمليات غير الصالحة
- إضافة تسجيل الطلبات/الاستجابات
- تنفيذ المصادقة
- إضافة اختبارات وحدات
إخلاء المسؤولية:
تمت ترجمة هذا المستند باستخدام خدمة الترجمة الآلية Co-op Translator. بينما نسعى لتحقيق الدقة، يرجى العلم أن الترجمات الآلية قد تحتوي على أخطاء أو عدم دقة. يجب اعتبار المستند الأصلي بلغته الأصلية المصدر المعتمد. للمعلومات الحساسة أو الهامة، يُنصح بالاعتماد على الترجمة المهنية البشرية. نحن غير مسؤولين عن أي سوء فهم أو تفسير خاطئ ناتج عن استخدام هذه الترجمة.