diff --git a/.idea/.gitignore b/.idea/.gitignore
new file mode 100644
index 0000000..13566b8
--- /dev/null
+++ b/.idea/.gitignore
@@ -0,0 +1,8 @@
+# Default ignored files
+/shelf/
+/workspace.xml
+# Editor-based HTTP Client requests
+/httpRequests/
+# Datasource local storage ignored files
+/dataSources/
+/dataSources.local.xml
diff --git a/.idea/beanstalkd-example.iml b/.idea/beanstalkd-example.iml
new file mode 100644
index 0000000..07afcd1
--- /dev/null
+++ b/.idea/beanstalkd-example.iml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/dbnavigator.xml b/.idea/dbnavigator.xml
new file mode 100644
index 0000000..ae4f687
--- /dev/null
+++ b/.idea/dbnavigator.xml
@@ -0,0 +1,456 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/markdown.xml b/.idea/markdown.xml
new file mode 100644
index 0000000..21988a0
--- /dev/null
+++ b/.idea/markdown.xml
@@ -0,0 +1,10 @@
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/modules.xml b/.idea/modules.xml
new file mode 100644
index 0000000..163ba7d
--- /dev/null
+++ b/.idea/modules.xml
@@ -0,0 +1,8 @@
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/php.xml b/.idea/php.xml
new file mode 100644
index 0000000..d9f67a7
--- /dev/null
+++ b/.idea/php.xml
@@ -0,0 +1,12 @@
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/vcs.xml b/.idea/vcs.xml
new file mode 100644
index 0000000..94a25f7
--- /dev/null
+++ b/.idea/vcs.xml
@@ -0,0 +1,6 @@
+
+
+
+
+
+
\ No newline at end of file
diff --git a/bstd.php b/bstd.php
new file mode 100644
index 0000000..2b9c868
--- /dev/null
+++ b/bstd.php
@@ -0,0 +1,15 @@
+ $i, 'date' => date('Y-m-d H:i:s'), 'server' => $_SERVER]);
+ $msg = json_encode([
+ 'id' => $i,
+ 'date' => date('Y-m-d H:i:s'),
+ 'PHP_SELF' => $_SERVER['PHP_SELF'],
+ 'SCRIPT_NAME' => $_SERVER['SCRIPT_NAME'],
+ 'SCRIPT_FILENAME' => $_SERVER['SCRIPT_FILENAME'],
+ ]);
+ $msg = json_encode([
+ 'id' => $i,
+ 'date' => date('Y-m-d H:i:s'),
+ '_SERVER' => $_SERVER,
+ //'_SERVER2' => $_SERVER,
+ ]);
-$start = microtime(true);
-for ($i = 0; $i < 100000; $i++) {
- $msg = "id: " . $i . ' date: ' . date('Y-m-d H:i:s') . ' ' . json_encode($_SERVER);
- $msg = json_encode(['id' => $i, 'date' => date('Y-m-d H:i:s'), 'server' => $_SERVER]);
+ $pheanstalk
+ ->useTube('ExampleTube')
+ ->put($msg);
- $pheanstalk
- ->useTube('ExampleTube')
- ->put($msg);
-
- echo 'Added: ' . $i . PHP_EOL;
-
- if (((microtime(true) - $start) * 1000) >= 1000) {
- break;
- }
+ //echo 'Added: ' . $i . PHP_EOL;
+ if (((microtime(true) - $start) * 1000) >= 1000) {
+ $lastIndex = $i;
+ break;
+ }
}
+echo "Last index: " . $lastIndex . PHP_EOL;
+
// with some settings
//$pheanstalk
// ->useTube('testtube')
diff --git a/readme.md b/readme.md
new file mode 100644
index 0000000..72c243e
--- /dev/null
+++ b/readme.md
@@ -0,0 +1,11 @@
+# Connect to beanstalkd with PHP
+
+Start beanstalkd daemon like that:
+
+```
+beanstalkd -l unix:/tmp/bstd.sock
+```
+
+
+
+
diff --git a/startbstd.sh b/startbstd.sh
new file mode 100755
index 0000000..cbbdb36
--- /dev/null
+++ b/startbstd.sh
@@ -0,0 +1,8 @@
+#!/bin/bash
+
+pkill -f wpcrm_bstd_service
+nohup beanstalkd -V -b ./bstd_data -f 300 -l unix://$(pwd)/bstd_data/wpcrm_bstd_service.sock -z 2097152 > bstd_data/bstd.log 2>&1 &
+
+#beanstalkd -V -l unix://$(pwd)/bstd_data/bstd.sock
+
+
diff --git a/worker.php b/worker.php
index c8dc4cc..89e837d 100644
--- a/worker.php
+++ b/worker.php
@@ -1,8 +1,9 @@
watch('ExampleTube');
@@ -11,24 +12,39 @@ $pheanstalk->watch('ExampleTube');
//for($i = 0; $i < 1000; $i++) {
while (true) {
- $job = $pheanstalk->reserve();
- try {
- $jobPayload = $job->getData();
- $jobPayload = json_decode($jobPayload);
- echo date('Y-m-d H:i:s') . ' ' . $jobPayload->id . PHP_EOL;
+ $job = null;
- //usleep(100);
- //sleep(2);
- // If it's going to take a long time, periodically
- // tell beanstalk we're alive to stop it rescheduling the job.
- $pheanstalk->touch($job);
- //sleep(2);
+ try {
+ $job = $pheanstalk->reserveWithTimeout(3);
- // eventually we're done, delete job.
- $pheanstalk->delete($job);
- } catch (\Exception $e) {
- // handle exception.
- // and let some other worker retry.
- $pheanstalk->release($job);
- }
+ if (is_null($job))
+ throw new Exception("Job is null");
+
+ $jobPayload = $job->getData();
+ $jobPayload = json_decode($jobPayload);
+
+ echo date('Y-m-d H:i:s') . ' ' . str_pad($jobPayload->id, 5, " ", STR_PAD_LEFT) . ' ' . $jobPayload->date . PHP_EOL;
+ //echo date('Y-m-d H:i:s') . ' ' . str_pad($jobPayload->id, 5, " ", STR_PAD_LEFT) . ' ' . json_encode($jobPayload) . PHP_EOL;
+
+ usleep(mt_rand(1, 10));
+ //sleep(2);
+ // If it's going to take a long time, periodically
+ // tell beanstalk we're alive to stop it rescheduling the job.
+ //$pheanstalk->touch($job);
+
+ // eventually we're done, delete job.
+ $pheanstalk->delete($job);
+ } catch (\Throwable $e) {
+ // handle exception.
+ // and let some other worker retry.
+ if (!is_null($job))
+ $pheanstalk->release($job);
+
+ if (str_contains($e->getMessage(), 'Connection refused')) {
+ echo 'Beanstalkd server is down';
+ die();
+ } else if (!($e instanceof Exception)) {
+ echo $e->getMessage() . PHP_EOL;
+ }
+ }
}